UITableView์ automaticDimension์ ์์๋์? cell์ height๋ฅผ ์ ์ฝ์กฐ๊ฑด๋ง ๋ง๋ค๋ฉด, ๋ด๋ถ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์๋์ผ๋ก rowHeight๋ฅผ ์ง์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค. UICollectionView์์๋ automaticDimension์ ๋ฐ๋ก ์ ๊ณต
info.plist์๋ ์์ฑํด์ฃผ๊ณ ,TargetMembeship๋ ์ฒดํฌ๋์ด์๊ณ ,Bundle Resource์๋ ์ถ๊ฐ๋๊ฒ์ ํ์ธํ์ผ๋.. NotoSansKR์ ์๋์ค์ง๋ง MaruBuri๊ฐ ์ ๋์ค์ง ์์๋ค.์ MaryBuriot์ธ๋ฐ์ฅ..์๋์ค๋ ๊ตฐ
ํ๋ก์ ํธ์์ SPM์ผ๋ก๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ ๋ฐ, SwiftLint์ SwiftFormat์์๋ SPM์ ์ง์ํ์ง ์์ต๋๋ค. ์ด ๋๋ฌธ์ homebrew๋ก ๋ ๊ฐ์ง๋ฅผ ์ค์นํด์ฃผ์ด์ผํฉ๋๋ค.SwiftLint๋ ๋ง ๊ทธ๋๋ก linting์, SwiftFormat๋ํ ๋ง๊ทธ๋
์คํ ๋ฆฌ๋ณด๋ ์์ด UI๋ฅผ ๊ตฌ์ฑํ ๋ ์ธํ ๊ณผ์ ์ ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.์คํ ๋ฆฌ๋ณด๋์์ ์ฝ๋ ๊ธฐ๋ฐ์ UI๋ฅผ ์ง๊ฒ๋ ๊ณ๊ธฐ๋ ์ ๊ฐ ๋ฐํํ Road to Pro 2021 - ๋์์ธ์์คํ ์ผ๋ก ํ ๋ฒ ์ง ์ฝ๋ ๋ฐฑ ๋ฒ ์จ๋จน๊ธฐ ์ธ์ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์! ํ์์ฒ๋ผ ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ค๋๋ค.์คํ ๋ฆฌ๋ณด๋
์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ ์๊ธด ํ๊ทธ๋ทฐ๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ค.compositional layout์ ์ด์ฉํ๋ฉด ์๋์ผ๋ก width๋ฅผ ์กฐ์ ํ ์ ์๊ณ ์ฌ๋ฐฑ์ ๋ฐ๋ผ ์๋ ํ์ผ๋ก ์ค๋ฐ๊ฟ๋๋ฏ๋ก ์ฝ๊ฒ layout์ ์ก์ ์ ์๋ค.์ฐ์ ๊ธฐ์กด ๋ฐฉ๋ฒ๋ถํฐ ์ดํด๋ณด์.cell ์ฌ์ด์ฆ๋ฅผ ๋์ ์ผ๋ก ๊ณ์ฐํด์ค ์
RxSwift๋ฅผ ์ด์ฉํ๋ฉด Notificationcenter ๋ํ ์ฝ๊ฒ ์ด์ฉํ ์ ์๋ค.์ด๋ก์จ ์ฐ๋ฆฌ๋ ์ด์ keyboardWillShowNotification์ ์ํ๋ฅผ keyboardWillShow๋ก ๊ด์ฐฐ ํ ์ ์๊ฒ ๋์๋ค. ๊ตฌ๋ ์ ํด์ค ๋ค ๋ทฐ ์ ๋ฐ์ดํธ ํด์ฃผ๋ฉด ๋!Rx
NSAttributedString ์ด์ฉํด์ ๋ฐ๊ฟ์ฃผ๊ธฐ!
1) ํ๋ฉด ์ ํ์ ํ์ํ ์ธ์คํด์ค ์์ฑ (UIViewController, ViewModel ๋ฑ)2) ์์ฑํ ์ธ์คํด์ค์ ์ข ์์ฑ ์ฃผ์ (DI)3) ์์ฑ๋ UIViewController์ ํ๋ฉด ์ ํ (push or present): ํ๋ฉด ์ ํ์ ํ์ํ UINavigation
ํญ๋ฐ๋ฅผ ์จํ ๋ ธ๋์์ผ๋ก ํ๊ณ ์ถ์์ผ๋ ์ด๋ ์ด์ ์์ ์ธ์ง ์๋์ ๊ฐ์ ๋ ๋ชฌ์์ผ๋ก ๋์๋คUI ๋๋ฒ๊น ์ ํด๋ณด๋ ์๋์ ๊ฐ์ด ๋ฟ์ฐ UIView๊ฐ ์์๋ค..์์ ํด๋์ค ์ด๋ฆ์ ๋ณด๋ UIVisualEffectBackdropView๋ผ๊ณ ์ฐํ์ด ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ํ๋ ๋๋ก ํด๊ฒฐํ
extension์ผ๋ก addObserver์ post๋ฅผ ๊ตฌํํด์ค๋ค.enum ์ผ๋ก ์์๋ฐ์ผ๋ฉด ๋ ํจ์จ์ ์!NotificationCenterManager.reloadProfile.post()NotificationCenterManager.reloadProfile.addObs
UIButton + Round + Shadow ๋ฌธ์ ์ํฉ ๋ฅ๊ทผ UIButton์ Shadow๋ฅผ ๋ฃ์ด์ฃผ๊ณ ์ถ์๋ค! ํ๋ก์ ํธ ์์์ ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ฅผ ์ต๋ํ ์ค์ด๊ธฐ ์ํด ์ด๋ฏธ์ง๋ ์ฌ์ฉํ์ง ์๊ณ ์ฝ๋๋ก๋ง ์์ฑํ๊ณ ์ถ์์ผ๋. ์๊ฐ๊ณผ๋ ๋ฌ๋ฆฌ ์ด๋ ค์ด ๋ถ๋ถ์ ๋ง์ดํ๊ฒ ๋๋๋ฐ..
๋ ๊ฐ๋ ๋ชจ๋ Observable๊ณผ Observer ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํ๋ฉฐ, ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ ์ ์๋ค. Subject๋ onError ๋ฐ onCompleted ์ด๋ฒคํธ๋ฅผ ๋ฐ์๋ค์ผ ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด Subject๋ ์ข ๋ฃ๋จ.Relay๋ ์ค์ง onNex
let์ผ๋ก ์ ์ธ๋ ์์๋ ํ ๋ฒ ๊ฐ์ด ํ ๋น๋๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์๋์น ์์ ๊ฐ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๊ณ ์ฝ๋์ ์์ ์ฑ์ด ํฅ์๋๋ค. ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ ๊ฒฝ์ฐ์๋ let์ ์ฌ์ฉํ์ฌ ๋ถ๋ณ์ฑ์ ๊ฐ์กฐํจ์ผ๋ก์จ ์์ ์ฑ์ ๋์ผ ์ ์๋ค.l
DiffableDataSource๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ๊ฐ์ฒด๊ฐ Hashableํด์ผํฉ๋๋ค. Hashableํ์ง ์์ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋จ๋๋ฐ์!"Hashable"์ Swift์์ ํ๋กํ ์ฝ(protocol)๋ก ์ ์๋ ํน์ฑ์ ๋๋ค. Hashable์ ์ฑํํ ํ์ ์
Strong์ ๊ฐ์ฒด๋ฅผ ์์ ํ์ฌ Reference Count๊ฐ ์ฆ๊ฐํ๋ ํ๋กํผํฐ์ด๋ค. ๊ฐ ์ง์ ์์ ์ retain์ด ๋๊ณ ์ฐธ์กฐ๊ฐ ์ข ๋ฃ๋๋ ์์ ์ release๋๋ค. ๋ ํผ๋ฐ์ค ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์์ผ ARC๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํผํ๊ณ ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ฐ์ธ๋ค.๋ณ
1. frame > The frame rectangle, which describes the viewโs location and size in its superviewโs coordinate system. super view๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋น ๋ทฐ์ ํฌ๊ธฐ๋ ์์น๋ฅผ ํ๊ธฐ
์ถ์ฒ : https://zeddios.tistory.com/43์ปจํธ๋กค๋ฌ๊ฐ ๊ด๋ฆฌํ๋ ๋ทฐ๋ฅผ ๋ง๋ ๋ค. ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ์์ฑ๋๊ณ ์์ฐจ์ ์ผ๋ก ์์ฑ๋์์๋๋ง ํธ์ถ๋๋ค.์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ค์ ํธ์ถ๋๋ค. ๋ทฐ๊ฐ ์์ฑ๋ ๋๋ง ํธ์ถ๋๋ค.ํ๋ฉด์ ๋ทฐ๊ฐ ํ์๋ ๋๋ง๋ค ํธ์ถ๋๋ค.
App์๋ 5๊ฐ์ง์ ์ํ๊ฐ ์กด์ฌํฉ๋๋ค.์คํ๋์ง ์์๊ฑฐ๋, ์์คํ ์ ์ํด ์ข ๋ฃ๋ ์ํ์คํ ์ค์ด์ง๋ง ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ณ ์์ง ์์ ์ํ, ์ฑ ์คํ ์ค ๋ฏธ๋ฆฌ์๋ฆผ ๋๋ ์ผ์ ์ผ๋ฟ์ด ํ๋ฉด์ ๋ฎ์ฌ์ ์ฑ์ด ์ค์ง์ ์ผ๋ก๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ง ๋ชปํ๋ ์ํ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ค์ง์ ์ผ๋ก ํ๋ํ๊ณ ์๋ ์ํ๋ฐฑ
Swift์์ ์ง์ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ชจ๋ธAutomatic Reference Counting์ปดํ์ผ๋ฌ๊ฐ ์์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ฝ๋๋ฅผ ์ฝ์ ํด์ค์ฝ๋์ ์์ ์ ์ด์ง๊ณ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ผ ์ ์๊ฒ ๋์๋ค. ์ธ์คํด์ค๋ ํ๋ ์ด์์ ์์ ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง๋๋ค.์์ ์๊ฐ
์ต์ ๋์ enum(์ด๊ฑฐํ)์ผ๋ก ๋ง๋ค์ด์ ธ ์๋ค.enum Optional์ ๋๊ฐ์ง case๋ก ๊ตฌ์ฑ๋์ด ์๋ค.nil์ด ์๋ ๊ฒฝ์ฐ some์ผ๋ก ๋ค์ด๊ฐ ๋์ด ์๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.์ถ์ฒ : https://developer.apple.com/documentation/s
์ปดํ์ผ๋ฌ๊ฐ ํ์ ๋ณํ์ ์ฑ๊ณต์ ๋ณด์ฅ ์ปดํ์ผ๋ฌ ํ์์ ๊ฐ๋ฅ , ๋ถ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ ์ ์๋คํ์ ๋ณํ ์คํจ์ nil , ์ปดํ์ผ๋ฌ ํ์์ ๊ฐ๋ฅ , ๋ถ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ ์ ์๋คํ์ ๋ณํ ์คํจ์ ์คํ์๊ฐ(๋ฐํ์)์ค๋ฅ, ์ปดํ์ผ๋ฌ ํ์์ ๊ฐ๋ฅ , ๋ถ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค
์์นด์ด๋ธ ์ค ์๋์ ๊ฐ์ ์ด์ ๋ก ์์นด์ด๋ธ๊ฐ ๋์ง ์์๋คInvalid bundle. Because your app supports Multitasking on iPad, you need to include the LaunchScreen.storyboard launch s