SwiftUI - kirseia/study GitHub Wiki
ํด๊ฒฐ๋ชปํ ์
- drag gesture + geometry reader ๊ฐ์ด ์ฌ์ฉํ๊ธฐ
- ๋ฒํผ ์์ญ ํ์ฅ ์ํค๊ธฐ ์ด๋ป๊ฒ ํ๋
- optional value ์ฒ๋ฆฌํ๊ธฐ - https://ericasadun.com/2019/06/20/swiftui-handling-optionals/
- a.map { $0 } ์ฒ๋ผ ์ฒ๋ฆฌํ๋๊ฒ ์ ค ํธํ์;
์ ๋ฆฌ
- Code๋ก ์ฝ๊ฒ Custom View๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋์์.
- preview๋ ์ฝ๊ฒ ๋ณผ ์ ์์
- import SwiftUI ๋ฅผ ํ๊ณ , View๋ฅผ ์์๋ฐ์์ ๋ง๋ค๋ฉด ๋จ
- PreviewProvider๋ฅผ ์์๋ฐ์์ ๋ง๋ ๋ทฐ๋ฅผ ํ๋ฆฌ๋ทฐ ํ ์ ์์
- ๋ด์ฉ์ dyanmic ํ๊ฒ ๋ก๋ํด์ ํ ์คํธ๋ ํ ์ ์์
- ๋๋ฐ์ด์ค๋ฅผ ์ข ๋ฅ๋ณ๋ก ๋ฏธ๋ฆฌ ์ค์ ํด์ ํ๋ฆฌ๋ทฐ๋ ํ ์ ์์ (iphone 8, iphone xs ๋ฑ ๋ค๋ฅธ ํ์ 2๊ฐ์ง๋ฅผ ๋์์ ๋ก๋ ๊ฐ๋ฅ)
- ๊ฒ๋ ๋น ๋ฅด๋ค๊ณ ํจ.
- Autolayout ์ SwiftUI์์ ์ฌ์ฉํ์ง ์์, flexible box layout system์ ์ฌ์ฉํจ
- ์์ง์ UITableView ๊ฐ์๊ฑด SwiftUI๋ก ์์ ๋์ฒดํ ์ ์์
- ์์ด ์ฝ๊ฐ ๋ค๋ฆ. dark mode / light mode์ ์ ํฉํ๊ฒ ์์์ ์ปจํธ๋กค ๋จ
- UIKit / SwiftUI ์์ด์ ์ฌ์ฉ ๊ฐ๋ฅํจ
๊ฐ๋จ ๊ณต๋ถํ๊ณ ๋ ๋ค ์ ๋ฆฌ
- SwiftUI ๋ ๊ธฐ์กด Xib / Storyboard / UIKit์ View๋ง ๋์ฒดํ๋๊ฒ ์๋๋ผ ์์๊ฑฐ ํฌํจํด์ ViewController๊น์ง ๋์ฒด๋๋ ๊ฒ ๊ฐ์ ๋๋
- ์ค์ ๋ด๋ถ์์๋ controller ์์ญ์ UIViewControllerRepresentable ๊ฐ์๊ฑธ๋ก ๋์ฒด๋๊ธด ํจ
- ๊ทผ๋ฐ gesture ์ฒ๋ฆฌ๋ ๊ธฐ์กด ๋ก์ง ์ฒ๋ฆฌํ๋ ๋ถ๋ถ ์๋น์๊ฐ binding ๋๋ฌธ์ SwiftUI ๋ด๋ถ๋ก ๋ค์ด์ค๊ฒ ๋จ.
- SwiftUI ๋ control code + view ๊ฐ ํฉ์ณ์ง๊ณ , ์์ ๋ถ๋ถ์ผ๋ก ์ชผ๊ฐ์ ์ฌ์ฉํ ์ ์์ด์ ์ฝ๋๊ฐ ๋ ๋จ์ํด์ง๋ ๋ฏ
์ฐธ๊ณ ์๋ฃ
- SwiftUI Data Flow
- ์ ํ Tutorial
- SwiftUI WWDC ์ธ์
๋ชจ์
-
Introducing SwiftUI: Building Your First App
- ๊ฐ๋จํ ์ฑ ๋ง๋ค๋ฉด์ binding ์ด ์ ์ข์์ง์ ๋ํด (์ ์ธ์ ํ๋ก๊ทธ๋๋ฐ์ด ์ ์ข์์ง) ์ค๋ช
-
- ๊ฐ๋จํ ์ฑ ๋ง๋ค๋ฉด์ View ์์ฑ๋ฒ, binding, Environment ์ฌ์ฉ, TabbedView ์ฌ์ฉ ๋ฑ
- ์ถ์ฒ !
-
- UIViewControllerRepresentable / UIViewRepresentable ๋ฑ ์ค๋ช , ๋ฐ์ดํฐ binding ๊ด๋ จ ์ค๋ช
- @ObjectBinding, @EnvironmentObject, @State ์ธ์... @Environment, @Binding ์ด ์์.
-
Building Custom Views with SwiftUI
- ๋ ์ด์์ ํ๋ก์์ ธ - ๋ทฐ๊ฐ ๊ทธ๋ ค์ง๋ ์์๋ฅผ step by step ์ผ๋ก ์๋ ค์ค
- Parent ๊ฐ size ๋ฅผ child ์ ์ถ์ฒ -> child ๊ฐ ์ค์ค๋ก ์ฌ์ด์ฆ๋ฅผ ์ ํ๋ค -> parent ๋ child ๋ฅผ ์ ๋นํ ์์น์ ์์น์ํจ๋ค
- ๋ณต์กํ(?) arc ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฌ๋ฉด์ ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌ๊น์ง ์ด๋ป๊ฒ ํ๋์ง ์๋ ค์ค
-
- ๊ธฐ์กด์๋ MacOS:AppKit, iPad+iOS: UIKit, AppleTV: (TVUIKit or UIKit), AppleWatch: WatchKit ์ด์์ง๋ง ์ด์ SwiftUI ํ๋๋ก ๊ฐ๋ค
- ํ๋์ ์ฌ์ด์ฆ๋ก ๋ชจ๋ ํ๋ซํผ์ ๋ง๋ ์ฑ์ ๋ง๋ค ์ ์์, ๋์ ๊ฐ์ ๊ธฐ์ , ์ฝ๋๋ฅผ ์ด์ฉํ ์ ์๊ฒ ํ์.
Writeonce,runanywhere, Learn once, apply anywhere <- SwiftUI ์ฒ ํ์ธ ๋ฏ- ํ๋์ ์ฑ์ ๋ง๋ค์ง ๋ง๊ณ , ์ฌ๋ฌ๊ฐ์ ์ฑ์ ๋ง๋ ๋ค.
- appleTV, macOS, iOS, appleWatch ๊ฐ๋ฐ ๋ทฐ ๊ตฌ์ฑ์ ๋ํด ์๋ ค์ค
- Apple TV ์๋ 10๊ฑธ์ ๊ฒฝํ์ ์ค์, ๋ทฐ๋ฅผ ํฌ์ปค์ค ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ผ ํจ
- iOS๋ TabbedView ์๋์ NavigationView๊ฐ ์๋๋ฐ, tvOS๋ NavigationView์๋์ TabbedView๊ฐ ์์.
-
- ์ถ์ฒ! ๊ผญ ์ฝ์ด๋ณด์.
- ํต์ฌ์ ์ ๋ณด์ ๋ถ์ฐ (๋ณต์ฌ๋์ด์...)์ ์ฑ์ ์ด๋ ต๊ฒ ๋ง๋ ๋ค. binding ์ผ๋ก ๋ณต์ฌ๋์ง ์๊ฒ ํ์.
- @State - binding ๊ฐ๋ฅํ ๊ฐ
- @Binding - Read and write without ownership / derived from @State (ํ์ ๋ทฐ์ ๊ฐ ์ ๋ฌ/์์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋)
- BindableObjectProtocol - class ๋ struct ๋ฅผ binding ํ ์ ์๊ฒ ํด์ค
- @ObjectBinding - BindableObjectProtocol ์ binding ํ๋ ๊ฒ
- @EnviromentObject - static ํ ๊ฐ. ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅ
-
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ ๊ทผ์ฑ - Label ์ ์ดํดํ๊ธฐ, Action ํ๊ธฐ, ์์์ ๊ทธ๋ฃนํ ํ๊ธฐ. ๋ฅผ ์ ํด์ผ ํจ
- ์ ๊ทผ์ฑ - ๊ฐ๋จํ๊ฒ๋ ์๊ฐ ์ฅ์ ์ธ๋ ์ธ ์ ์๊ฒ ๋ณด์ด์ค ์ค๋ฒ ํด์ฃผ๋ ๊ฒ๋ค ๊ฐ์ ๊ฒ.
-