๐ iOS122 [Swift] ํ๋ก์ ํธ์ Realm ์ ์ฉํ๊ธฐ (cocoapod ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ) Swift ํ๋ก์ ํธ์ Realm ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฝ์ฝ์ํ์ผ๋ก install ํด๋ด ์๋ค~ ์ฐ์ ํ ๊ฒ์ Finder์ ์์ ์ ํ๋ก์ ํธ ํ์ผ์ ๋์ ๋์ผ์ธ์ ์ ํ๋ก์ ํธ ํ์ผ ๋ช ์ "Universal Memo" ์ ๋๋ค. ์ด์ Command + Space bar๋ฅผ ๋๋ฌ์ terminal์ ๊ฒ์ํ๊ณ ์คํ ํฉ๋๋ค cd๋ฅผ ์ ๋ ฅํ๊ณ ํ๋ก์ ํธ ํ์ผ์ dragํด์ terminal๋ก ์ด๋์์ผ ์ฃผ์ธ์ ๊ทธ๋ฆฌ๊ณ enter์ ๋๋ฌ์ฃผ๋ฉด ํด๋น ํด๋์์ ์์ ์ ์คํ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ์์ ์ ํ๋ก์ ํธ๋ก ์์ ํ์ผ ์์น ๋ณ๊ฒฝ ๋ ๊ฑธ ํ์ธํ๊ณ pod init ์ ์ ๋ ฅํด ์ฃผ์ธ์ ๊ทธ๋ฌ๋ฉด ํ๋ก์ ํธ ํ์ผ์ ๋ณด๋ฉด Podfile์ด ์์ฑ๋์ด ์๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค. ์ ๋ vi ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ๋ค์ terminal๋ก.. 2020. 10. 8. [Swift] Notification์ผ๋ก view์ view ๋ฐ์ดํฐ ์ ๋ฌํ๊ธฐ ๋์ค์ ์ฐธ๊ณ ํ๋ ค๊ณ ์ ๋ ๊ธ ํด๋์ค ์ ์์ ์ฒดํฌํ ์ ์๊ฒ ๋์(?) ๋๋์ด Notification์ ์ฐ๊ธฐ๋ก ํ๋ค! ์ RxRxํ๋์ง ์๊ฑฐ ๊ฐ๋ค... ใ ใ ใ 1. Notification ๋ฑ๋กํ๊ธฐ NotificationCenter.default.addObserver(self, selector: #selector(updateDateLabel(_:)), name: .updateYearDate, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(updateHour(_:)), name: .updateHour, object: nil) NotificationCenter.default.addObserver(self, selecto.. 2020. 10. 7. [Swift] Date์ DateFormatter๋ก ํ๊ตญ ํ์ฌ ์๊ฐ ๊ตฌํ๊ณ UILabel์ ๋ฃ์ด๋ณด๊ธฐ ๊ทธ ๋์ ๋ฏธ๋ฃจ๊ณ ์์๋ Date๋ฅผ ๋ณผ๋๊ฐ ์จ๊ฑฐ ๊ฐ๋ค....๐คจ Horizontal collectionView์ ์ฒซ ๋ฒ์งธ ์ ์ ํ์ฌ ๋ ์ง๋ก ๊ธฐ์คํด์ ๊ทธ ๋ค์ ๋ ์ ๋ค์ ์ ์ ํ ๋นํด ์ฃผ๋ ์์ผ๋ก ๋ง๋ค๊ฒ๋๋ค! ์ฐ์ now๋ผ๋ ํ๋กํผํฐ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. let now = Date().timeIntervalSince1970 Date() ๋ ํ์ฌ ๋ ์ง์ ์๊ฐ์ ๋ฐํํ๊ฒ ๋๋๋ฐ timeIntervalSince1970์ 1970๋ ์ดํ๋ก ๋ช ์ด๊ฐ ํ๋ ๋์ง ๋ํ๋ ๋๋ค. ํ์ฌ ์๊ฐ์ now๋ผ๋ ํ๋กํผํฐ์ ์ง์ ํด ์ค๋๋ค. ๋ค์์ผ๋ก DateFormatter์ ์์ฑํฉ๋๋ค. let date: DateFormatter = { let df = DateFormatter() df.locale = Locale(identifier: "ko.. 2020. 9. 29. [Swift] UICollectionViewCell ์์ UICollectionView ๋ฃ๊ธฐ UICollectionViewCell ๋ํ ํ๊ณ ํ๊ณ ์ฌ๋ผ๊ฐ๋ค ๋ณด๋ฉด UIView์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ์ ์ฉํ ๋ฐฉ์๊ณผ ๋๊ฐ์ด ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ๊ตฌ์ฑ์ ๋ณด๋ฉด ์ฃผํฉ์ ๋ทฐ๋ 3๊ฐ์ ์น์ ์ ๊ฐ์ง UICollectionView์ด๊ณ ์ด๋ก์ ๊ตฌ์ฑ์ ๋ณด๋ฉด ์ฃผํฉ์ ๋ทฐ๋ 3๊ฐ์ ์น์ ์ ๊ฐ์ง UICollectionView์ด๊ณ ์ด๋ก์์ ๊ฐ ์น์ ์ ๋ค์ด๊ฐ ์๋ ํ๋์ UICollectionViewCell ์ ๋๋ค ๊ทธ๋ฆฌ๊ณ ๋ถํ์์ ๋ง์ง๋ง ์น์ ์ ์๋ UICollectionViewCell์ UICollectionView๋ฅผ ๋ฃ๊ณ sub cell์ ๊ตฌํํด ์ค ๋ชจ์ต์ ๋๋ค ์ฐ์ ๋ง์ง๋ง ์ค์ ์๋ ์ด๋ก์ UICollectionViewCell์ ํด๋์ค ์ด๋ฆ์ MinutePickerCell ์ด๋ผ๊ณ ํ๊ณ ์ฌ๊ธฐ์ ๋ถํ์์ UICollectionView๋ฅผ .. 2020. 9. 29. [Swift] UICollectionView์์ Section์ ๋๋ ๋ณด์! ์ค๋น๋ฌผ & ๋ค์ด๊ฐ๋ฉฐ ์ด์ ํฌ์คํ ์ ์ด์ด์ ์์ ํ๋ ํํ ๋ฆฌ์ผ ์ด์ง๋ง ์ด๋ฏธ ์์ฑ๋ ๊ธฐ๋ณธ UICollectionView๋ง ์๋ค๋ฉด ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋ ๊ฑฐ ๊ฐ์ต๋๋ค! ์ด๋ฒ์ ๊ตฌํํ ๊ฒ์ UICollectionView๋ฅผ 3๊ฐ์ Section์ผ๋ก ๋๋๋ ๊ฒ ์ ๋๋ค~ (์น์ ์ ๋ค์ด๊ฐ๋ ์ ์ ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.) ๊ฐ๋ UI ํํ ๋ฆฌ์ผ ๋ณด๋ฉด ์๋จ ์ปฌ๋ ์ ๋ทฐ๋ ์๋์ผ๋ก ๋์ด๊ฐ๋ ์นด๋๋ทฐ, ๋ฐ๋ก ์๋์๋ ๋ค๋ฅธ ์ปฌ๋ ์ ๋ทฐ๋ฅผ ๋๋ ๋ค ๋๊ฐ, ๊ฐ์ ํ๋ฉด์์ ๋ค๋ฅธ ์ปฌ๋ ์ ๋ทฐ๋ค์ด ๋ค์ด๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๊ฐ์ ์ปฌ๋ ์ ๋ทฐ๋ฅผ ๊ตฌํํด๋ ๋๊ฒ ์ง๋ง Section์ ๋๋์ด ๊ตฌํํด๋ ๋ฉ๋๋ค~ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์๋์ง ์์๋ด ์๋ค~~ section์ ๊ฐฏ์๋ฅผ ์ง์ ํ๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค. optional func numberO.. 2020. 9. 28. [Swift] Anchor ์ฌ์ฉํด์ UIView ๋ฃ๊ธฐ ๋ค์ด๊ฐ๊ธฐ์ ์์... Programmatically ๋ทฐ์ ๋ทฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. interface builder ์์ UIView๋ฅผ ์ถ๊ฐํ๊ณ frame์ ์ง์ ํด ์ค๋ ๋์ง๋ง ์ฝ๋๋ก view๋ฅผ ์์ฑํด์ addSubView ํด์ฃผ๊ฑฐ๋ ํด๋ํฐ ๋ฐฉํฅ(width๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ), safe Area ๋ฑ์ Anchor๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ํธํ ๋๊ฐ ์์ต๋๋ค. ์ด์ ์ ํฌ์คํ ํ collectionView์์ ์์ํ๋ฉฐ ์ด๋ ๋ฐ์ํ ์ค๋ฅ๋ width๊ฐ ์ ๋๋ก ๋์ค์ง ์์ ์งค๋ฆฌ๋ ๊ฒฝ์ฐ์์ต๋๋ค. Anchor๋ฅผ ํตํด์ ์ด๋ป๊ฒ ๊ณ ์น ์ ์๋์ง ์์๋ด ์๋ค. ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ view๋ฅผ ์์ฑํด์ ๋ฃ์ด์ฃผ๊ธฐ ์ํด storyboard์ ์ถ๊ฐํ ๋ทฐ๋ฅผ ์ญ์ ํด์ฃผ์์ต๋๋ค ์ฐ๊ฒฐ๋ IBOutlet ์ญ์ ๋ ๊ผญ ํด์ค๋๋ค ViewController.swif.. 2020. 9. 28. [iOS] Xcode ๋ ๋ฒ์ ๊ฐ์ด ๊น๊ธฐ Xcode 12 ๋ฒ์ ์ ๋ฐ์ดํธ ๊ฐ๋ฅํ์ ๋ง์ ์ ๋ฐ์ดํธ ํ๋๋ ์ฌ๊ฑธ Xcode 11์ด ํ์ํด ์ก๋ค... ๋น์ฐํ ์ธํฐํ์ด์ค ๋น๋ ํด ๋ฒ์ ๋ ๋ฐ๋๋ ๊ฑด๋ฐ ์ ๋ฐ์ดํธ ๋ฒํผ ๋ฐ๋์๋ง์ ์๊ฐ๋ฝ์ด ๋ง์๋๋ก ๋๋ฌ๋ฒ๋ฆฌ๋ ๊ฑธ ์ฐ์งธ ์ ์ฐ์ Finder > ์์ฉ ํ๋ก๊ทธ๋จ (ํน์ Application)์ผ๋ก ๋ค์ด๊ฐ ์ค๋๋ค ์ ๋ฐ์ดํธ ํ Xcode์ ํ์ผ ๋ช ์ ๋ฐ๊ฟ ์ฃผ์ธ์ (๋ญ์ผ ๋ค์ด๋ฒ ์จ์ผ ์ ๋ ๊ฐ์ง..ใ ใ ใ ) ์ ์ด์ https://developer.apple.com/download/more/ ๋ก๊ทธ์ธ - Apple idmsa.apple.com ์๋ ๋งํฌ๋ก ๋ค์ด๊ฐ ์ค๋๋ค! ๋ก๊ทธ์ธ ํ์ํด์ ๋ก๊ทธ์ธ ํด์ฃผ๊ณ ์ํ๋ ๋ฒ์ ์ ๊ฒ์ํด ์ค๋๋ค. ๋ค์ด ๋ฐ์ ์ฃผ์ธ์ one hour later... ๋ค์ด ๋ฐ์ Xcode ์คํํด ์ฃผ๋ฉด ํ๋์ ๋งฅ์์.. 2020. 9. 28. [Swift] UIViewController ์ UICollectionView ๋ฃ๊ธฐ ์๋ด ํด๋น ํํ ๋ฆฌ์ผ์ ์คํ ๋ฆฌ๋ณด๋์์ UICollectionViewController ๋ก ์์ํ๋ ๊ฒ์ด ์๋ UIViewController์ UIView๋ฅผ ๋ฃ๊ณ ํด๋น ๋ถ๋ถ์ UICollectionView๋ฅผ ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ด์ฉ์ ๋๋ค. ์คํ ๋ฆฌ ๋ณด๋์์ UICollectionViewController๋ก ์์ํ๊ณ ์ ํ์๋ฉด ๋ค๋ฅธ ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์. ์ค๋น ํ๋ก์ ํธ๋ฅผ ์์ฑํด ์ฃผ๊ณ ๋น๋ ํด์ค๋๋ค. ์คํ ๋ฆฌ๋ณด๋๋ก ์คํ ๋๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค. ์ด์ ์คํ ๋ฆฌ๋ณด๋๋ก ๊ฐ์ UIView๋ฅผ ์ถ๊ฐํด ์ฃผ๊ฒ ์ต๋๋ค. command + shift + L ์ํ๋ ์์ญ์ ๋ง์ถ์ด constraints๋ฅผ ์ถ๊ฐํด ์ค๋๋ค. ์ด์ ViewController.swift๋ฅผ ์ด์ด ์ค๋๋ค. UICollectionView๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ UICol.. 2020. 9. 28. UICollectionView must be initialized with a non-nil layout parameter ์๋ฌ Exception NSException * "UICollectionView must be initialized with a non-nil layout parameter" 0x000060000266a430 ์๋ฌ ๋ฉ์์ง์์ ์ ์ ์๋ฏ์ด UICollectionView๋ nil ํ์ ์ด ์๋ layout ํ๋ผ๋ฏธํฐ๋ก ์ด๊ธฐํ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ปฌ๋ ์ ๋ทฐ๋ฅผ ์์ฑํ ๋ ๋ ์ด์์์ผ๋ก ์ด๊ธฐํ ์์ผ ์ฃผ๋ฉด ๋ฉ๋๋ค! let collectionView: UICollectionView = { let layout = UICollectionViewFlowLayout() layout.minimumLineSpacing = 10 layout.scrollDirection = .vertical layout.sectionI.. 2020. 9. 28. [Swift] ์์ ๊ฐ๋จํ tutorial -> URLSession์ผ๋ก json api ์์ ํ์ฑ๊น์ง ๊ตฌ๊ธ ๊ฒ์ํ๋ค๊ฐ ๋ฌด๋ฃ json ์ฌ์ดํธ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋คโบ๏ธ 6๊ฐ์ง ์ข ๋ฅ์ api๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ณต๋ถ ์ฉ์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์ฐ์ ์ ๊ฐ ์ฌ์ฉํ ๊ฒ์ 'Posts' ์ ๋๋ค. (์ง๊ธ ํฌ์คํธ ๋ง๋ก ์ ๋ ธ๋๋ฅผ ๋ค์ผ๋ฉฐ ํฌ์คํธ๋งจ์ผ๋ก ํฌ์คํธ api ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ ์์ต๋๋ค๐ Postman ๊ฐ์ถ) ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด Dictionary๊ฐ Array๋ก ๋ค์ด์ค๊ณ ์์ต๋๋ค ์ฆ ์ฒ์์๋ key๊ฐ์ด ์์ด์ฉ ์ฐ์ UI๋ ๊ธฐ๋ฅ์ ์ธ ๋ถ๋ถ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ JSON ๋ฐ์ดํฐ ๋ถํฐ ํ์ฑํด ๋ณด์ฃ ๊ตฌ์กฐ๊ฐ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ์ฒด๋ ๊ฐ๋จํ๊ฒ ์์ฑํด ์ค๋๋ค. ์ด๋ Decodable ์ด๋ ๋์ฝ๋ฉ ์ธ์ฝ๋ฉ์ ์๊ฐํด ์ฃผ์๋ฉด ๋ฉ๋๋ค Encodable์ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ณํํด ์ค๋ Decodable์ JSON์ผ๋ก ๋ถํฐ ๊ฐ.. 2020. 9. 12. [Swift] UINavigationController ์ฌ์ฉํ๊ธฐ ๐ช Storyboard ์์ ์๋ฒ ๋ ํ๊ธฐ Storyboard > Editor > Embed in > Navigation Controller ๐ช Programmatically import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { self.window = UIWindow(frame: UIScreen.main.bound.. 2020. 9. 8. [iOS, Swift] AppDelegate์์ window์ rootViewController ์ค์ ํ๊ธฐ Swift ํ๋ก์ ํธ๋ฅผ ์ฒ์ ์์ฑํ๊ณ ๋น๋ํ์ฌ ์คํํ๋ฉด ์ฒซํ๋ฉด์ด Main.storyboard๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ์ ์๋ ViewController.swift ๋ง๊ณ ์์ ์ด ์์ฑํ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ window์ root view controller๋ก ์ค์ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ๋ํ ์ฑ ์์๊ณผ ๋์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ก๋ํ๋ฉด์ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ํ์ํ ์ด๊ธฐ๊ฐ์ด ์๋ค๋ฉด?! ์ด๋๋ AppDelegate์ ์ฝ๋ ๋ช ์ค์ ์ถ๊ฐํด ์ฃผ์ด์ผ ํฉ๋๋ค. ์ ๊ฐ ํ์ฌ ๊ณต๋ถํ๊ณ ์๋ ์ฑ ์ the big nerd ranch guide ios programming์ ๋ช ๋ ์ง๋ ์ฑ ์ ๋๋ค. ์ฑ ๋๋ก ๋ฐ๋ผํ๋ xcode๊ฐ ์์ ๊ณผ ๋ฐ๊ปด ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ผ๊ตฌ์. ๊ทธ๋์ ์ด๋ฒ์ ์์ xcode์๋ ์๋ window๋ ์ ์ธํด.. 2020. 8. 27. ์ด์ 1 ยทยทยท 7 8 9 10 11 ๋ค์