์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |
- ios
- components
- SWiFT
- ์๊ณ ๋ฆฌ์ฆ
- mongoose
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ง๋ฒ๋ณํ
- Filter
- ์ฑ๋ง๋ค๊ธฐ
- CRUD
- Figma
- Firestore
- Encodable
- nodejs
- Decodable
- Mac
- Codable
- Firestore CRUD
- map
- ์ฑ๋์์ธ
- DispatchQueue
- MongoDB
- Core Data
- ExpressJS
- Cloud Firestore
- RxSwift
- Reduce
- String.Index
- UIRefreshController
- AVAudioPlayer
- Today
- Total
๋ชฉ๋กiOS [Swift]/๊ธฐ์ด๋ฅผ ํํํ! (32)
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์ด๋ผ๊ณ ํ๋กํ ์ฝ์ ์ ์ํด..
์ด์ ํฌ์คํ ์์ 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. ๋ค์ํ..
์๊ฐ์ด ๊ฐ์๋ก ์ ์ RxSwift๋ ๊ผญ ์์์ผ ํ๋ ํธ๋ ๋์ฃ ~~?ใ ใ Apple์์๋ Rx+MVVM Base์ธ SwiftUI๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ ์ ์งํฅํ๋ ๊ฒ ๊ฐ๊ณ ์ ใ ใ (๊ฐ์ธ์ ์ธ ์๊ฐใ ) ์ ๋ฌด๋ฅผ ํ๋ฉด์๋ ์ ํด๋ณผ ๊ธฐํ๊ฐ ์์ด์, ํผ์ ๋ฐ๋ก๋ผ๋ ํ๋ฒ ๊ณต๋ถํ๋ฉด์ "์ ์ด๋ ๊ฐ๋ ์ ๋๋ ์๊ณ ๊ธฐ๋ณธ์ ๋๋ ์ฌ์ฉํ ์ ์์ด์ผ๊ฒ ๋ค" ํด์ ์์ํด๋ณด๋ ค๊ณ ํด์!! ๐ ๊ทธ๋งํผ ์์ด๋ณด๋ฅผ ์ํ ์ ๋ฌธ์ฉ ํฌ์คํ ์ด ๋๊ฒ ์ง๋ง, ํต์ฌ ๊ฐ๋ ์ด๋ ์๋ฆฌ๋ ์์ ์ ํจ๊ป ์์ธํ ๋ค๋ค๋ณผ ์์ ์ด๋ผ ์กฐ๊ธ์ ๊ธด ํฌ์คํ ์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค!! ๐ญ ๊ทธ์น๋ง! ์ด ํฌ์คํ ์ ์ฒ์ฒํ๋ผ๋ ์์ฃผํ์ ๋ค๋ฉด RxSwift์ ๋ํ ๊ฐ๋ ์ด๋ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์ตํ์ค ์ ์์๊ฑฐ์์ ๐ง๐ป RxSwift์ ๋ํด์ ์์๋ณด๊ธฐ ์์ํ๊ธฐ ์ ์, ๊ธฐ๋ณธ์ ์ธ Swift์ ๋ํ ๋ด์ฉ์ ์๊ณ ์๋ค๊ณ ..