์ ์ฒด ๊ธ184 [Swift] ์ฝ๋๋ก ์คํ ๋ฆฌ๋ณด๋ ์ฐ๊ฒฐํ๊ธฐ how to load UIViewController with Storyboard Programmatically ์ฝ๋๋ก ์คํ ๋ฆฌ๋ณด๋ ์ฐ๊ฒฐํ๊ธฐ ์คํ ๋ฆฌ๋ณด๋์์ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์๋ ๋ ์ ์ฒซ๋ฒ์งธ ์์ด์ฝ์ ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค๋ก ๋๋ก๊ทธ์ค ๋๋กญ ํ์ฌ ๋ทฐ๋ก ๋จ์ด๋จ๋ ค ์ค์๋น Outlets์์ view๋ฅผ ์ ํํ์ฌ ์ฐ๊ฒฐํด ์ฃผ๋ฉด ๋ฉ๋๋น ์ธ๋์ผ์ดํฐ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ํด๋ฆญํ๋ฉด xCode ํ๋ฉด ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ identity indicator ๊ฐ ๋ฌ๋ค ๋ง์ฝ ๋จ์ง ์์ผ๋ฉด ์์ด์ฝ์ ๋๋ฌ ์ด๋. Stroryboard ID๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํด ์ค ๊ฒ์ด๋ฏ๋ก Storyboard ID์ ์ด๋ฆ์ ์ ๋ ฅํด ์ค๋๋ค ๊ทธ ํ ์ฝ๋๋ก ๋์์์ ๋ทฐ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ฅผ ์ป์ด ๋ณด๋ฉด let viewController = UIStoryboard(name: "์คํ ๋ฆฌ๋ณด๋ ์ด๋ฆ", bundle: nil) .instantiateViewController(withIdentifier: "storyboa.. 2022. 1. 11. [RxSwift] Relays์ ๋ํด์ ์์๋ณด๊ธฐ Relay๋? Observable๊ณผ Subject๋ฅผ ํ ๋๋ RxSwift๋ง importํด์ค๋ ๋์์ง๋ง Relay๋ UI์ ์ฌ์ฉ ๋๊ณ PublishSubject์ Wrapper ํด๋์ค์ด์ RxCocoa ํด๋์ค ์ด๋ฏ๋ก RxCocoa๋ฅผ ์ํฌํธ ํด์ฃผ์ด์ผ ํจ. (RxRelay๋ผ๊ณ ์์ผ๋ RxCocoa ์ํฌํธ ํ๋ฉด ํจ๊ป ์ํฌํธ ๋จ) Relay๋ replay subject ์ ๋น์ทํ ๋์์ ์ํํ์ง๋ง Subject, Observable๊ณผ ๋ฌ๋ฆฌ .completed, .error ์ด๋ฒคํธ๊ฐ ์๋ค. ์ฌ์ง์ด .next ์ด๋ฒคํธ๊ฐ ์๋ accept(_:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. terminate ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค์ง ์๊ธฐ ๋๋ฌธ์ Dispose ๋๊ธฐ ์ ๊น์ง ๋์ํ์ฌ UI์ ์ฌ์ฉ๋๋ค๊ณ ํจ PublishRelay publish rela.. 2022. 1. 10. [RxSwift] Subject ์์๋ณด๊ธฐ Subject๋ ๋ฌด์์ผ๊น? Subject๋ Observable๊ณผ Obsever ๋๋ค ํ ์ ์๋ค. ์ฌ๊ธฐ์ Observable์ ๊ด์ฐฐ ๋์์ด๋ค. Observable์ ๊ด์ฐฐ ๊ฐ๋ฅํ ํ๋ฆ์ ์์ฑํ๊ณ Observer๊ฐ Observable์ ๊ตฌ๋ ํ์ฌ ์ด๋ฒค๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. Subject๋ ์ด ๋์ ๋ค ํ๋ ํ์ ์ผ๋ก ๊ด์ฐฐ๊ฐ๋ฅํ ํ๋ฆ์ ์์ฑํ๊ณ ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถ์ํค๋ฉฐ ์๋ง๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. Subject ํ์ - PublishSubject : ์ด๋ ํ ๊ฐ๋ ์์ด ์์ฑ๋๋ฉฐ ์ค์ง ์๋ก์ด ๊ตฌ๋ ์์๊ฒ elements๋ฅผ ๋ฐฉ์ถํ๋ค. - BehaviorSubject : ์ด๊ธฐ๊ฐ๊ณผ ํจ๊ป ์์ฑ๋๋ฉฐ ์ด ์์ฑ๋ ๊ฐ์ ๊ตฌ๋ ์์๊ฒ ์ฌ์์ํค๊ณ ์ต์ ์ elements์ ์ฌ์์ํจ๋ค. - ReplaySubject : ๋ฒํผ์ฌ์ด์ฆ์ ํจ๊ป ์์ฑ. e.. 2022. 1. 9. [RxSwift] Traits ์ side effect & Subject ๊ธฐ๋ณธ Traits traits์ ๊ธฐ์กด Observable ๋ณด๋ค ์ข๋ ์์ ๋ฒ์์ ๊ธฐ๋ฅ์ ์ํํ๋ Observable ์ด๋ค ํ์๋ก ์์์ผ ํ๋ ๊ฐ๋ ์ ์๋๋ค ํ์ง๋ง ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๋ค๋ฅธ ์ฌ๋์ด ๋ณผ๋ ์ข๋ ๋ช ํํ๊ฒ ๋ณผ ์ ์๋ค. ๊ผญ ํ์ํ ๊ฒ์ ์๋๋ ๋ง์ Single : .success(value) == .nextํน์ .error == .completed ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๋ค ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ ํ๊ฑฐ๋ ๋์คํฌ๋ก ๋ถํฐ ๋ก๋ฉ์ด ๊ฑธ๋ฆด ๋ ์ฌ์ฉ๋๋ ๋ณด๋ค Completable .completed ํน์ .error ์ด๋ฒคํธ๋ฅผ ๋ฐํ. ์ด๋ ํ ๊ฐ๋ ๋ฐฉ์ถํ์ง ์๋๋ค. ๋ง์ฝ์ ์ค์ง ์ฑ๊ณต๊ณผ ์คํจ๋ก ๋๋๋ ์คํผ๋ ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ๋ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด ํ์ผ์ ์ฝ๊ณ ๊ทธ๊ฒ์ด ์ฑ๊ณตํ๋์ง ์ํ๋์ง ๋ฐฉ์ถํ ์ ์๋ค. Maybe singl.. 2022. 1. 7. [RxSwift] DisposeBag ๊ณผ Operator observable์ subscription๋๊ธฐ ์ ๊น์ง ์๋ฌด๋ฐ ์ด๋ฒคํธ๋ ๋ฐฉ์ถํ ์ ์๋ค -> ์๋ฌด๊ฒ๋ ํ ์ ์์ subscription์ด ์ต์ ๋ฒ๋ธ์ด ๋์ํ๋๋ก ์๋ก์ด ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๋๋ก ํ๊ณ .error ํน์ .completed ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๊ฒ ํ๋ฉฐ ์ข ๋ฃ์ํค๊ฒ ํ๋ ํธ๋ฆฌ๊ฑฐ ๊ฐ์ ์ญํ์ ํ๋ ๊ฒ! ๊ทธ๋ ๋ค๋ฉด ๋์ด์ ์ต์ ๋ฒ๋ธ์ด ํ์ ์์ด์ง๊ฑฐ๋ ๋ ์ด์ ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๊ณ ์ถ์ง ์๋ค! ํ ๋๋ ์ ํ๋ธ ์ฒ๋ผ ๊ตฌ๋ ์ทจ์ ํ ์ ์์ ์ด๊ฑธ ์ํ ํ๋ ๊ฒ์ด Disposing์ ๊ฐ๋ ์ด๊ณ observable์ ์ฆ์ ์ข ๋ฃ๋๋ค! $0์ default argument๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฑธ ์ฒ์ ์์๋น. ์ฑ ์์์ ํํ์ธ๊ฐ? let disposeBag = DisposeBag() ์ด๋ ๊ฒ DisposeBag์ ์์ฑํ์ฌ ํ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ.. 2022. 1. 6. [RxSwift] Observable, Operators ๊ทธ๋ฆฌ๊ณ subscribe - ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ก์ฐ ์ํคํ ์ฒ์ ์ ์ฉ์ํค๊ธฐ ์ ๋ฆฌํจ - ๋ฐ์ํ์ฑ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด์ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ค ํ์๋ ์์(์ผ๋ถ์ ์ฝ๋๋ค์ ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ณ , ์๋ก์ด ๊ธฐ๋ฅ๋ค์ RxSwift๋ก ์ ์ํ๋ฉด ๋๊ฒ ๋ค) - MVVM + RxSwift ์กฐํฉ ใด ViewModel Observable ํ๋กํผํฐ๋ฅผ ๋ฐฉ์ถํ๊ฒ ํ๋๋ฐ ์ด๋ View controller์ ๊ณ ์ ๋ ์ฝ๋์์ UIKit controls๊ฐ ์ง์ ์ ์ผ๋ก ๋ฐ์ธ๋ ๋๊ฒ ํ ์ ์์ -> Observable ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด์ UIKit์ Controls ์์๋ฅผ ์ต์ ๋น ํ ์ ์์ Podfile์์ 2022๋ 1์ ๊ธฐ์ค ์๋ pod ์ถ๊ฐ pod 'RxSwift', '6.1.0' pod 'RxCocoa', '6.1.0' pod install ๋ก ์ค์น ์๋ฃ ํ ํ๋ก์ ํธ ์ฌ.. 2022. 1. 5. [iOS/Swift] Custom Font ์ฌ์ฉํ๊ธฐ ์ฌ์ฉํ ํฐํธ ๋ค์ด๋ก๋ ๋ฐ xCode ํ๋ก์ ํธ ๋ด๋ถ ํด๋์ ๋๋๊ทธ ์ค ๋๋กญ์ผ๋ก ๋ฃ์ด์ค๋๋ค. ๋๋ - ์์ ์ฉ ๋ฌด๋ฃํ๊ธํฐํธ ์ฌ์ดํธ ์์ ์ ์ผ๋ก ์ด์ฉํ ์ ์๋ ๋ฌด๋ฃ ํ๊ธ ํฐํธ๋ฅผ ๋ชจ์ ๋์ ์ฌ์ดํธ ๋๋ noonnu.cc ๋๋์์ ์์ ์ฉ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ ๋ฌด๋ฃ ํ๊ธ ํฐํธ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์์ Copy items if needed ์ต์ ์ ์ ํํ๋ฉด xCode ํ๋ก์ ํธ ํด๋ ๋ด๋ถ์ ๋ณต์ ๋์ง๋ง ํด์ ํ๋ ๊ฒฝ์ฐ ์๋ ํฐํธ๊ฐ ์์๋ ํด๋์ ์ฐ๊ฒฐ๋ง ๋ฉ๋๋ค. ! ์ค์ : ํฐํธ๋ฅผ ์ฌ์ฉํ ํ๊ฒ์ ์ ํํด ์ค ๋ค์์ผ๋ก Info.plist ํ์ผ์ Fonts provided by application ํค๋ฅผ ์ถ๊ฐํด ์ฃผ์ด์ผ ํฉ๋๋ค. UIAppFonts ์ถ๊ฐํด ์ค ํฐํธ๋ฅผ info.plist์ ์ถ๊ฐํด ์ฃผ์ด์ผ ์ฌ์ฉ๊ฐ๋ฅ ๊ผญ ํ์ฅ์ ๊น์ง ๊ฐ์ด ์ ๋ ฅ์ ํด.. 2021. 12. 19. [Swift] RIBs Architecture ๊ฐ์์ ํ ํ๋ฆฟ ์ค์ ๋ทฐ ์์ด ๋น์ฆ๋์ค ๋ก์ง๋ง ํ์ํ ๊ฒฝ์ฐ๊ฐ ์ ์๊ณ ๊ณต์์ ์ธ ํ๋ก์ ํธ์์ ์ด๋ฌํ ์ํคํ ์ฒ๋ฅผ ๋์ ํ์ง๋ ์๊ธฐ ๋๋ฌธ์ RIBs ์ ๊ณต๋ถํด์ผ ๊ฒ ๋ค๊ณ ๋ง์๋จน๊ธฐ ๊น์ง ๊ต์ฅํ ์ค๋ ๊ฑธ๋ ธ๋ค. ๋์ ํ ์คํธ์ UI ํ ์คํธ๋ฅผ ์งํํ๋ ๊ฒ์ด ์ ๋ถ์๋๋ฐ ์ด๋ฒ์ ๊ท๋ชจ๊ฐ ์ข ์๋ ํ๋ก์ ํธ๋ฅผ ํด๋ณด๋ฉด์ ํ ์คํธ์ ์ค์์ฑ์ ๊นจ๋ซ๊ธฐ ์์ํ๊ณ , ๊ธฐํ์ด ๋ฐ๋ ๋ ๋ง๋ค ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ UI๊ฐ ์์ ๋์ด์ผ ํ๋ ์ํฉ์ ๋ณด๋ฉด์ ์ ์ํคํ ์ฒ๋ฅผ ๋์ ํ์ฌ ์ฌ์ฉํ๋์ง ๋๋ผ๊ฒ ๋์๋ค. UI๊ฐ ๋น์ฆ๋์ค์ ๊ธด๋ฐํ ์๋ก ์์ ํ๋๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ๊ฒฐ๊ตญ MVVC, MVVM ๋ฑ์ ๊ธฐ์ ๊ฑฐ๋ฆฌ๋ค๊ฐ RIBs๋ผ๋ ์ํคํ ์ฒ๋ฅผ ์๊ฒ ๋์๋ค. ์ฐ๋ฒ์์ ์ ์ํ ์ํคํ ์ฒ์ด๋ฉฐ ๋ทฐ๋ฅผ ํ์๋ก ํ์ง ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ํ RIB ์ ๋ง๋ค ์ ์๋ค๋ ๊ฒ๊ณผ ํ ์คํธ์ ์ฉ์ด์ฑ์ด๋ผ๋ ๋ง.. 2021. 11. 12. [Swift] push notification ์ ๋ฆฌ (with Firebase) permission๊ณผ ํธ์ ๋ฐ์ ๋ ํธ์ถ๋๋ ํจ์ ์นด์นด์คํก์ ์คํ์ํค์ง ์์ ์ํ์์ ์๋๋ฐฉ์ผ๋ก ๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋ ์ค๋ ์๋, ํน์ ์ฑ์์ ๊ด๊ณ ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด์ ๋ฑ๋ฑ ๋ง์ ๊ณณ์์ push notification์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋น ๊ฑฐ์ ํ๋ก์ ํธ ํ ๋๋ง๋ค ํ์๋ก ๊ตฌํํ๊ธฐ๋ ํ๊ณ ์ฒ์์ ํ๋ค๋ณด๋ฉด ๊ฝค๋ ๋ณต์กํด์ ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋น ๐ฆ๐ฆ๐ฆ push notification์ด๋ Apple Push Notification service = APNs๋ฅผ ์ด์ฉํด์ ์ฑ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธํฉ๋๋น ์ฑ์ด ์คํ๋์ง ์์ ์ํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ ๋ค์ด ์๋ ์ํ์์๋ ์ฌ์ฉ์์๊ฒ ํธ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ์ค ์ ์์ต๋๋น โญ ๋น๊ทผ~ ํน์ ์นดํก! ํ๋ ๊ฒ์ฒ๋ผ ์ํ๋ ์ฌ์ด๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ์งง์ ํ ์คํธ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์๋ ์์ต๋๋ค ๋ํ ์ฑ ์์ด์ฝ ์์ ๋จ๋ ๋ฑ์ง์.. 2021. 10. 27. [SwiftUI 3.0] URLSession ๊ณผ List, @Published, @ObservedObject ์ฌ์ฉํ๊ธฐ SwiftUI ์์๋ ๋ทฐ์์ ์ฌ์ฉํ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ด ๊ธฐ์กด Storyboard ๋ฐฉ์๊ณผ๋ ๋ค๋ฆ ๋๋ค. ์ค๋์ ๋ทฐ ๋ฐ์ ํด๋์ค์์ ์ฌ์ฉ๊ฐ๋ฅํ ํ๋กํผํฐ์๋ ํผ ์ธ @ObservedObject๋ฅผ ์๊ฐํ๊ณ ์์ฃผ ๊ฐ๋จํ ํํ ๋ฆฌ์ผ๋ก ์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค @ObservedObject๋ฅผ ์๊ธฐ ์ ์ ObservableObject์ ๋ํด์ ์์๋ณผ๊ฒ์ ObservableObject๋ Combine์ ์ํ ํ๋กํ ์ฝ์ ๋๋ค ํด๋น ํฌ์คํ ์์ Combine์ ๋ค๋ฃจ์ง ์์ง๋ง RxSwift์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋์ @ObservedObject๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ObservableObject ํ๋กํ ์ฝ์ ์ฑํํด ์ฃผ์ด์ผ ํฉ๋๋ค. @ObservedObject๋ ํด๋น ํ๋กํผํฐ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด @Published ํ๋กํผํฐ ์๋ ํผ๊ฐ ์๋์ผ๋ก.. 2021. 10. 27. [iOS/swift] UINavigaitonBar tint color iOS 15 + iOS 14์ ๊ฒฝ์ฐ large title ์์ ์ ์ฉ๋์๋ scrollEdgeAppearance ์์ฑ์ด iOS15์์๋ ๋ชจ๋ ๋ค๋น๊ฒ์ด์ ์ ์ ์ฉ๋๋ค๊ณ ํฉ๋๋ค.. iOS 15์์ ํ๋ก์ ํธ ์์ฑํ์ฌ ๋ค๋น๊ฒ์ด์ ์ ์ฌ์ฉํ๊ฑฐ๋ ๊ธฐ์กด์ ๋ค๋น๊ฒ์ด์ ์ ์ฌ์ฉํ ํ๋ก์ ํธ๋ ํ๋ฒ์ฉ ํ์ธํด์ผ ํ ๊ฒ ๊ฐ์์ ๐ค scrollEdgeAppearance ๋ ์คํฌ๋กค ๊ฐ๋ฅํ ์ปจํ ์ธ ์ edge๊ฐ navigation bar ์ edge์ ์ ๋ ฌ๋๋ ๊ฒฝ์ฐ appearance๋ฅผ ์ธํ ํด ์ค๋๋ค! ์๋ฅผ ๋ค์ด์ big title์ ๊ฒฝ์ฐ title์ด ๋ค๋น๊ฒ์ด์ ์ ๊ทธ๋ ค์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋น ์ด ์์ฑ์ default ๊ฐ์ nil ์ด์ง๋ง iOS 15 ๋ถํฐ๋ ๋ชจ๋ ๋ค๋น๊ฒ์ด์ ์ ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ฒ์ ํ๋ฉด์ ๋ํ๋๋ ๋ค๋น๊ฒ์ด์ ์ ํฌ๋ช ํ๊ฒ ๊ทธ ์ดํ ์คํฌ๋กค ์ปจํ ์ธ ๋ฅผ.. 2021. 10. 21. [swift 5] ๋ฐฐ์ด ํ์์ ๋ฌธ์์ด ๋ง๋ค๊ธฐ let imageList = ["image1", "image2", "image3"] ์ ๊ฐ์ ๋ฐฐ์ด์ด ์์ ๋ "[image1, image2, image3]" ํ์์ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ํจ์์ ๋๋ค. func arrayToString(list: [String]) -> String { let itemStr = list.joined(separator: ", ") return "[" + itemStr + "]" } joined๋ฅผ ์ฌ์ฉํด์ ๊ฐ ๋ฐฐ์ด ์์ดํ ์ฌ์ด ์ฌ์ด์ ์ผํ๋ฅผ ์ถ๊ฐ ํด์ฃผ๋ ์ฝ๋ ์ ๋๋ค. json ํต์ ํ ๋ ๊ฐ๋ ๊ฐ ์์ดํ ์ ์ด๋ ์ด ํ์์ ์คํธ๋ง์ผ๋ก ๋ง๋ค์ด ๋ณด๋ด์ผ ํ๋๋ฐ ์์ ๊ฐ์ด ๋ณด๋ด ์ค๋๋ค. ํ๋ฆฐ ๋ด์ฉ์ด ์๊ฑฐ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ๋๊ธ ๋ถํ๋๋ ค์ค ๐ค ์ฐธ๊ณ ์ฌ์ดํธ https://stackoverflo.. 2021. 7. 26. ์ด์ 1 ยทยทยท 7 8 9 10 11 12 13 ยทยทยท 16 ๋ค์