์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Mac
- ios
- Core Data
- Cloud Firestore
- Encodable
- Firestore
- ํ๋ก๊ทธ๋๋จธ์ค
- Firestore CRUD
- DispatchQueue
- ExpressJS
- UIRefreshController
- String.Index
- Codable
- Filter
- Decodable
- ์ง๋ฒ๋ณํ
- mongoose
- MongoDB
- AVAudioPlayer
- SWiFT
- ์ฑ๋์์ธ
- RxSwift
- ์๊ณ ๋ฆฌ์ฆ
- map
- nodejs
- Reduce
- CRUD
- ์ฑ๋ง๋ค๊ธฐ
- components
- Figma
- Today
- Total
๋ชฉ๋กSWiFT (59)
Focus On Develop ๐ค๐ค
์๋ ํ์ธ์~~~๐ ์ง์ง ์ง์ง ์ค๋๋ง์ ๊ธ์ ์ฐ๋ ๊ฒ ๊ฐ์์ ใ ใ ใ ใ ์ค๋๋ง์ ๊ธ์ ์ฐ๋ ค๋ ๋ฌด์จ ๋ด์ฉ์ผ๋ก ์ด๋ป๊ฒ ์จ์ผํ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ด์!! ๊ณต๋ถํ๊ณ ๊ฐ๋ฐํด์ค๋ฉด์ ๋์ค์ ์ด๋ฐ ๋ด์ฉ๋ ์จ์ผ๊ฒ ๋ค~ ์ ๋ฆฌํด์ผ๊ฒ ๋ค~ ํ๋๋ฐ ์์ด๋ค๊ฐ ์ํ์ก์ด์..... ๊ทธ๋๋ ๋ค์ ๋ง์์ ์ก๊ณ ๊ธฐ์ต์ ๋๋ฌ์ด ์ฐจ๊ทผ์ฐจ๊ทผ ์ฐ๋ ค๊ณ ํด๋ณผ๊ฑฐ์์! ๊ทธ๋ฐ ์๋ฏธ์์ ๊ฐ๋จํ ๋ด์ฉ๋ถํฐ ์ ๋ฆฌํด๋ณด๊ธฐ๋ก ํ์ด์! ์ผ๋ฐ์ ์ผ๋ก ์ฑ์ ๊ฐ๋ฐํ๋ค๋ณด๋ฉด ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ํ ๋ฐ, ์๋ฒ์ ์ ์ฅ์ ํ ์๋, ๋ก์ปฌ์ ์ ์ฅ์ ํ ์๋ ์์ฃ ? ๋ก์ปฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ค์ํ ๋ฐฉ๋ฒ ์ค์์๋ Realm์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๊ณ ์! (TMI) Realm์ ๋ ๋ฆ, ๋ ์ด๋ป๊ฒ ์ฝ์ด์ผ ํ๋์ง ํท๊ฐ๋ ธ๋๋ฐ.. Realm ๊ฐ๋ฐ ๋ด๋น์๊ฐ "๋ " ์ด๋ผ๊ณ ์ฝ์ด์ผ ํ๋ค๊ณ ํ๋๋ผ๊ณ ์! ์ ํด ๋ค์ ์ด์ผ๊ธฐ์์..
์ด๋ฒ ํฌ์คํ ์ UITextField์ ํ๊ธ์ ๋ ฅ์ ๊ธ์์ ์ ํํ๋ ๊ธฐ๋ฅ์ ์ ๋ฆฌํ๊ธฐ ์ํจ์ ๋๋ค! ์ด๋ฒ์ ๊ฐ๋ฐํ๋ฉด์ ๊ธ์์ ์ ํ์ด ์๋ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ๋ฃ๊ฒ ๋๋๋ฐ, ์์ด๋ ์ด๋ชจ์ง๋ก๋ ๊ธ์์ ์ ํ์ด ์ ๋์ํ๋๋ฐ, ํ๊ธ ์ ๋ ฅ์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ๊ตฌ์ ๐ญ ์๋ฅผ๋ค๋ฉด 5์ ์ ํ์ด๋ผ๊ณ ํ ๋ "๊ฐ๋๋ค๋ผใ " ์ด๋ ๊ฒ "ใ "๋ฅผ ์น์ง ๋ชปํ๊ฒ ๋๊ฑฐ๋, "๊ฐ๋๋ค๋ผ๋ง"์ ์น๊ณ ์ถ์๋ฐ "๊ฐ๋๋ค๋ผ๋ง"+"ใ "์ด ์ ๋ ฅ์ด ์๋๊ฑฐ๋, "๊ฐ๋๋ค๋ผ๋ง"์์ ๊ณ์ ํ์ดํ์ "๋ง" ๋ถ๋ถ์ ํ์ดํํ๋ ๋ฌธ์๊ฐ ๊ณ์ ์ ๋ ฅ๋๊ฑฐ๋ ใ ใ ๊ทธ๋์ ๊ฒช์๋ ์ํ์ฐฉ์ค๋ฅผ ์ ๋ฆฌํ๋ฉด์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ์์ฑํด๋๋ ค๊ณ ํด์!! ์๋ง ์ด ๊ธ์ ๋น์ธ๊ธฐ ๊ธ์ด๋ผ์ ใ ใ ๋๊ตฌ์๊ฒ ๋ ธ์ถ์ด ๋ ์ง ์ฌ์ค ์๋ชจ๋ฅด๊ฒ ์ง๋ง.. ์ด๊น์ง ์ค์ จ๋ค๋ฉด ์๋์ ์ฝ๋๋ ๋ณธ์ ๋ง์ผ์ค๊ฑฐ์์! ๊ตฌ๊ธ๋งํด๋ณด๋ฉด TextFi..
์๋ ํ์ธ์ ๐ ์ค๋์ AssociatedType์ ๋ํด์ ์์๋ณผ๊ฑฐ์์! ๋ง ๊ทธ๋๋ก ๊ด๋ จ๋ ํ์ ..? ์ฐ๊ด๋ ํ์ ..? ๊ทธ๋ฐ๊ฑด๋ฐ, ์ฌ์ค์ Generic์์ placeholder ํ์ ๊ฐ์๊ฑฐ์์!! ๋ฌด์จ๋ง์ด๋.. ์์๋ฅผ ๋ค์ด์ ๋ด ์๋ค์!! protocol Appendable { var collection: [String] { get set } func append(_ item: String) } class StringArray: Appendable { var collection: [String] = [] func append(_ item: String) { collection.append(item) } } Appendable์ด๋ผ๋ ์ด๋ค Array์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ์ง protocol์ด ์์ด์..
์ด๋ฒ์๋ ์ ๋ง ์ค๋๋ง์ ๊ธ์ ์ฐ๋ค์~~ ใ ใ ๊ทธ๋์ ์์๋ Big Event๋ ์์ํ ์ผ์ ๋ธ๋ก๊ทธ์ ํฌ์คํ ํ๋ ๊ถ๊ธํ์ ๋ถ(?)์ ๋๋ฌ์ค์ธ์~!! ๐ ์ค๋์ Swift์์ Error๋ฅผ ์ด๋ป๊ฒ Handlingํ๋ฉด ๋๋์ง ์ ๋ฆฌํด๋ณผ๊ฑฐ์์. "๊ทผ๋ฐ Error Handling์ด ๋ญ๋ฐ~?" ๋ง ๊ทธ๋๋ก ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ค๊ฐ ์๋ฌ๊ฐ ๋ฐ์ํ์๋, ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฑด์ง~? ๋ผ๊ณ ํด์ํด๋ ๋ ๊ฒ ๊ฐ์์! ๊ตฌ๊ตฌ์ ์ ์ค๋ช ๋ณด๋ค๋.. ์ญ์ ๊ฐ๋จํ ์์ ๋ฅผ ๋ณผ๊ฒ์! enum CustomError: Error { case invalidUrl case urlEmpty case other } ๋จผ์ Custom ํ์ ์ผ๋ก Error๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์. ์ด๋ฐ ์๋ฌํ์ ์ ์ํ๋๋๋ก ์ง์ ํด์ ๋ง๋ค ์ ์๊ณ , ์ํ๋ ๋งํผ case๋ฅผ ๋๋ ์๋ ์์ด์~!..
ใ ใ ๋ ์ค๋๋ง์ ๊ธ์ ์จ๋ด ๋๋ค~~ ์์ผ๋ก ์ข ์ข ์ฐ๋ฝ์ฒ ๊ฐ์ ธ์ค๊ธฐ, ์ด๋ฉ์ผ๋ณด๋ด๊ธฐ, ์ ํ๊ฑธ๊ธฐ, ์ฑ์คํํ๊ธฐ, ๋ก์ปฌNoti, ๋ณด์ ๋ฑ๋ฑ ์์ดํฐ์ OS๊ธฐ๋ฅ(?)์ ์ฌ์ฉํ๋ ๊ฒ๋ค์ ๋ํด์ ๋ช๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํด์!! ์ด ํญ๋ชฉ๋ค์ ๊ฐ๋จํ Bento ์๋ฆฌ์ฆ! ๋ผ๊ณ ํ๊ณ ์์ํด๋ณผ๊ฒ์ ๐ ์ฒซ๋ฒ์งธ ํฌ์คํ ์ ์ฐ๋ฝ์ฒ ๊ฐ์ ธ์ค๊ธฐ์ ๋๋ค! ๋จผ์ ํด๋ํฐ์ ์ฐ๋ฝ์ฒ์ ์ ๊ทผํ๋ ค๋ฉด, ์ฌ์ฉ์๊ฐ ๊ถํ์ ํ๋ฝํด์ผ ๋์!! ์ฑ ์ค์นํ๊ฑฐ๋, ์นด๋ฉ๋ผ๋ก ์ฐ์ผ๋ ค๊ณ ํ๊ฑฐ๋ ๋ฑ๋ฑ ํ ๋ ์ด๋ฐ๊ฑฐ ๋ง์ด ๋ณด์ จ์ฃ ~~? ์ด ๊ถํ์ ํ๋ํ๊ธฐ ์ํด, ํ๋ก์ ํธ ์ค์ ์ ํด์ค๋๋ค. Info.plist์ ์ด ํญ๋ชฉ์ ์ถ๊ฐํด์ฃผ์ธ์! ์ ๋ ์ด๋ฐ ํน์ ๋ชฉ์ ์ ๊ฐ์ง๋ ๊ธฐ๋ฅ๋ค์ ํ๋กํ ์ฝ๋ก ๋ฐ๋ก ์ ์๋ฅผ ํด๋ฌ์. ์ด๋ฒ์๋ ์ฐ๋ฝ์ฒ ๊ด๋ จ๋ ๋ด์ฉ์ด๋๊น ContactUsable์ด๋ผ๊ณ ํ๋กํ ์ฝ์ ์ ์ํด..
์ค๋์ App Store๋ก ์ฑ์ ๋ฐฐํฌํ๋ ๊ณผ์ ์ Fastlane์ ํตํด ์๋ํ ํ๋๊ฑธ ํด๋ณด๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ง๋ ์๋ฌ๋ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค!! ์ง๊ธ ์ ๊ฐ ๊ฐ๋ฐํ๋ ์๋น์ค๋ ํ๊ท ์ ์ผ๋ก ๋ณด๋ฉด ํ๋ฌ์ 1~2ํ ์ ๊ท ๋ฒ์ ์ ์ถ์ ํ๋ ๊ฒ ๊ฐ์์. ์ฌ์ค ๋ฐฐํฌํ๋ ๋น๋๋ ๊ทธ๋ ๊ฒ ๋ง์ง ์๊ณ , ๊ทธ ๊ณผ์ ์ด ๋ง์ด ๋ณต์กํ ๊ฒ(?)๋ ์๋๋ผ์.. ๋ฑํ ๋ถํธํ๊ณ ๊ท์ฐฎ๋ค๊ณ ์๊ฐ์ ์ํ๋ ๊ฒ ๊ฐ์์! ๊ทธ๋ฐ๋ฐ.. ์ต๊ทผ์ ๊ฐ์๊ธฐ ์๋ํ๋ฅผ ํด์ผ๊ฒ ๋ค, ๋ผ๊ณ ์๊ฐ์ด ๋ฌธ๋ ๋ค์๋๋ฐ์! ์ฑ์คํ ์ด์ ์ฑ์ ๋ฐฐํฌํ๊ณ , ์ ๋ก๋ ์๋ฃ๋์๋ค, ํ ์คํธ ํ๋ผ์ดํธ ๋ฐฐํฌ๋์๋ค, ๋ฑ๋ฑ ํ ์คํฐ ์กฐ์ง์๊ฒ ๊ณต์ ๋ฅผ ํด์ผํ์ฃ . ๊ทผ๋ฐ ์ฑ์คํ ์ด์ ์ ๋ก๋ํ๊ณ , ๊ทธ ํ์ ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์๊ฐ์ด ์ ํด์ ธ์์ง ์๊ณ ๊ฐ๋ณ์ ์ด์ฃ ~? ๊ทธ๋ผ ๊ทธ๋๋ง๋ค ๋ชจ๋ํฐ๋ง ํ๋ฉด์ ์ฒ๋ฆฌ๋๋ ๊ณผ..
์ด์ ํฌ์คํ ์์ RxSwift ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๊ณผ ์ฌ์ฉ๋ฒ์ ์์๋ดค๋๋ฐ์~!! ๊ทผ๋ฐ ํ๊ฐ์ง ์๋ฌธ์ ์ด ์๊ธฐ์ฃ ! Observable์ ๊ตฌ๋ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ธฐ๋ ํ๋๋ฐ, ๋ฐ๋๋ก Observable์ ๋ฐ์ดํฐ ๋ณํ๋ ์ด๋ป๊ฒ ์ค ์ ์์๊น์? ๊ทธ๋์ผ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ตฌ๋ ํด์ User Interaction์ ๋ฐ๋ผ ๋ญ๊ฐ UI์ ๋ณํ๋ฅผ ์คํ ๋ฐ์! ์ฌ๊ธฐ์ ๋์จ๊ฒ ๋ฐ๋ก Subject ์ ๋๋ค. ํ๋ฒ Subject์ ๋ํด ์์๋ณผ๊น์~~~ ๐ reactivex.io/documentation/subject.html ReactiveX - Subject If you have a Subject and you want to pass it along to some other agent without exposing its S..
์ง๋ ํฌ์คํ ์์ RxSwift์ ์ ๋ฌธํด๋ดค๋๋ฐ์~!! ๊ทธ๋ผ ์ด RxSwift๋ ์์จ์ผํ ๊น์~? ์ฅ๋จ์ ์ ํ๋ฒ ํํค์ณ๋ณผ๊ฒ์!! RxSwift์ ์ฅ์ 1. ๋ฐ์ํ ํจ๋ฌ๋ค์์ด ์ ๊ณตํ๋ ๋ช ํํจ, ๋น๋๊ธฐ๋ฅผ ๋๊ธฐํ ์ฝ๋์ฒ๋ผ ์์ฑ์ด ๊ฐ๋ฅ 2. ์ผ๊ด์ฑ์ด ์๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ํ๋์ ๋น๋๊ธฐ ์ฝ๋๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅ - ์ด๋์๋ DispatchQueue, ์ด๋์๋ OperationQueue..... 3. Rx๋ก ์ผ๊ด๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ํ์ฅ์ด ๋ถ๊ฐ๋ฅํ ์ํคํ ์ฒ ํจ๋์ ํด๊ฒฐํ ์ ์์ - ์๋ก ๋ค๋ฅด๊ฒ ๊ตฌํํ ๋ก์ง์ ์กฐํฉํ๊ธฐ ์ฝ๊ณ , ํ์ฅ์ด ์ด๋ ค์ด ๋ถ๋ถ์ ํด๊ฒฐ ๊ฐ๋ฅ 4. Thread ์ฒ๋ฆฌ๊ฐ ์ฌ์์ง - Callback ์ง์ฅ์์์ ํ์ถ - UI ์ด๋ฒคํธ, ๋คํธ์ํฌ ์ฒ๋ฆฌ ๋ฑ๋ฑ ๋ฐ์ดํฐ ๊ฐฑ์ ํ์ ๋์ ์ฒ๋ฆฌ๊ฐ ์ฌ์ 5. ์ฝ๋๊ฐ ๊น๋ํด์ง 6. ๋ค์ํ..