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