Discover Observation in SwiftUI - WWDC23
https://developer.apple.com/videos/play/wwdc2023/10149/
https://developer.apple.com/documentation/observation
Observation μ μ¬μ©νλ©΄ νμ€ Swift ꡬ문μ μ¬μ©ν΄μ λͺ¨λΈμ μ μνκ³ , UI κ° λͺ¨λΈμ λ³κ²½μ¬νμ μλ΅νλλ‘ ν μ μλ€.
SwiftUI λ₯Ό μ¬μ©ν΄μ μννκ³ μ§κ΄μ μΌλ‘ κ°λ°ν μ μλ€!
λͺ©μ°¨
1:03 - What is Observation?
4:23 - SwiftUI property wrappers
7:34 - Advanced uses
10:27 - ObservableObject
What is Observation?
Observation μ property μ λ³κ²½ μ¬νμ μΆμ νκΈ° μν Swift μ μλ‘μ΄ κΈ°λ₯μ΄λ€.
- Swift 5.9 μ μλ‘μ΄ λ§€ν¬λ‘ μμ€ν μ μ¬μ©νλ€. (magic of macros!)
κΈ°μ‘΄μ μ‘΄μ¬νλ λ°μ΄ν° λͺ¨λΈ ν΄λμ€μ @Observable νλ‘νΌν° λνΌλ₯Ό μΆκ°νλ©΄ UI κ° λͺ¨λΈμ λ³κ²½ μ¬νμ μλ΅νλλ‘ λ§λ€ μ μλ€.
- @Observable μ Swift μ»΄νμΌλ¬μκ² μμ±ν μ½λλ₯Ό type μ κ΄μ°° ν μ μλ νμ₯λ νμμΌλ‘ λ³ννλλ‘ μ§μνλ€.
Observable type μΌλ‘ μλνλλ° λ€λ₯Έ μ’ λ₯μ νλ‘νΌν° λνΌλ νμνμ§ μλ€ !
- κΈ°μ‘΄μλ SwiftUI View μμ λ³κ²½λλκ±Έ κ°μ§νκΈ° μν΄μλ κ° λͺ¨λΈμ μμ±μλ @Published λ₯Ό λΆμ¬μΌ νκ³ ,
- λ°μ΄ν° λͺ¨λΈμλ StateObject, EnvironmentObject λ±μ νλ‘νΌν° λνΌλ₯Ό λΆμμ΄μΌ νλ€.
SwiftUI λ body μ½λλ₯Ό μνν λ λͺ¨λΈμ΄ νΉμ μμ±μ μ‘μΈμ€ νλ€λ κ²μ μκ³ μκ³ , μμ μ½λλ§μΌλ‘ donuts μμ±μ μ‘μΈμ€νκ²μ κ°μ§ν μ μλ€.
- body μ μ½λκ° μνλ λ, SwiftUI λ Observable νμ μμ μ¬μ©λλ μμ±μ λν λͺ¨λ μ‘μΈμ€λ₯Ό μΆμ νλ€.
- κ·Έ μ΄ν μΆμ ν μ 보λ₯Ό ν΅ν΄μ μΈμ€ν΄μ€μ μμ±μ λν λ³κ²½μ¬νμ΄ λ°μλ μκΈ°λ₯Ό κ²°μ νλλ° μ¬μ©νλ€.
μ μ½λμμλ Add new donut λ²νΌμ ν΄λ¦ν΄μ donuts λ°°μ΄μ λ³κ²½νλ©΄ DonutMenu λ·°κ° λ¬΄ν¨νλκ³ UI κ° μ λ°μ΄νΈλκ² λλ€.
- ν΄λΉ λ·°μμλ orders μμ±μ λν μ κ·Όμ΄ μκΈ° λλ¬Έμ, ν΄λΉ κ°μ΄ λ°λκ² λμ΄λ λ·°λ μ λ°μ΄νΈ λμ§ μλλ€.
Computed property λ₯Ό μΆκ°νλ©΄ μ΄μ κ³Ό λμΌν κ·μΉμ λ°λΌμ μ¬μ©λλ μμ±μ΄ λ³κ²½λλ©΄ UI κ° μ λ°μ΄νΈλλ€.
- orders κ° λ³κ²½λλ©΄ orderCount λ λ³κ²½λκ³ , Text λ μ λ°μ΄νΈλλ€.
μΈμ€ μμ½
- Macro
- @Observable 맀ν¬λ‘λ₯Ό μ¬μ©νλ©΄ κ΄μ°°μ΄ κ°λ₯ν μ νμ΄ λλ€.
- Track access
- SwiftUI λ μμ±μ λν μ κ·Όμ μΆμ νκ³ , Observation μμ λ³κ²½λλ μκΈ°λ₯Ό κ΄μ°°ν μ μλ€.
- Property changes cause UI updates
- μΆμ μ 보λ₯Ό ν΅ν΄ μ κ·Όμ΄ μλ μμ±μ΄ λ³κ²½λ λλ§ View λ₯Ό λ€μ κ·Έλ¦¬κ² λλ€.
Swift Macro μ λν΄μ λ μμ보기 μΈμ
https://developer.apple.com/videos/play/wwdc2023/10166
https://developer.apple.com/videos/play/wwdc2023/10167
SwiftUI property wrappers
Observable μ μ¬μ©νλ©΄ SwiftUI μμ μ¬μ©ν property wrapper μ¬μ©μ΄ μ¬μμ§λ€.
- κΈ°μ‘΄μ μ¬μ©νλ state, environment, bindable μ μΈμ μ΄λ»κ² μ¬μ©λ κΉ π§
@State
@State μμ±μ λ·°κ° λͺ¨λΈμ μ μ₯λ μ체 μνλ₯Ό κ°μ ΈμΌ νλ κ²½μ°μ μ¬μ©λλ€.
- donutToAdd state λ³μλ sheet λ©μλλ₯Ό ν΅ν΄ λ°μΈλ©λμ΄ λͺ¨λ¬ λ·°λ₯Ό λμ°κ³ , λ«μ λ μ¬μ©νλ€.
- μ΄λ κ² νΉμ λ·°μ μλͺ μ£ΌκΈ°μ λ°λΌ κ΄λ¦¬λ κ²½μ°μλ @State property wrapper λ₯Ό μ¬μ©νλ€.
@Environment
@Environment μμ±μ ν΅ν΄μ μ μμ μΌλ‘ μ κ·Ό κ°λ₯ν κ°μΌλ‘ μ νν μ μλ€.
- Observable type μ μ κ·Όμ μΆμ ν΄μ μ λ°μ΄νΈλ₯Ό νκΈ° λλ¬Έμ, userName μ΄ λ³κ²½λ λ FoodTruckMenuView κ° λ³κ²½λλ€.
@Bindable
Binding λ³΄λ€ μ’ λ κ°λ³κ² λ±μ₯ν Bindable νλ‘νΌν° λνΌ
- Observable type μ λν΄μ λ°μΈλ©μ κ°λ₯νλλ‘ ν΄μ€λ€.
- $ ꡬ문μ μ¬μ©ν΄μ ν΄λΉ μμ±μ λν λ°μΈλ©μ κ°μ Έμ¨λ€.
μμ μμ μμ μ΄λ¦μ ν μ€νΈνλλ₯Ό ν΅ν΄ λ³κ²½νκ³ μΆλ€λ©΄
- Text λ₯Ό TextField λ‘ λ³κ²½νκ³ $ ꡬ문μ μ¬μ©ν΄μ name μ λν λ°μΈλ©μ μ λ¬νλ€.
- λλμ λ°μΈλ©νλ €λ©΄ @Bindable var donut μΌλ‘ λ³κ²½νλ©΄ λλ€.
Observable type μ State, Environment, Bindable λ‘ μ€μ ν μ§μ λν κΈ°μ€
Advanced uses
μμ μμ λ€μμ Observable type μ μ μ₯λ μνμ λͺ¨λΈμμλ§ μ¬μ©λμμ§λ§, λ λ§μ μΌλ€μ ν μ μλ€.
- SwiftUI λ μΈμ€ν΄μ€μ νλμ λν μ‘μΈμ€λ₯Ό μΆμ νκΈ°μ, λ°°μ΄, μ΅μ , observable model μ ν¬ν¨ν λͺ¨λ νμ μ μ¬μ©ν μ μλ€.
- μλ μμ μμ Observable type μΈ Donut μ λ°°μ΄ ννλ‘ μ μΈν΄λ, νμν κ²½μ°μ UI κ° μλμ λ°μ΄νΈλλ€.
computed property μ ν¬ν¨λ μμ±μ΄ Observable type μ΄ μλ κ²½μ° Observation κ³Ό ν¨κ» μλνλ €λ©΄ λκ°μ§ λ¨κ³λ₯Ό μΆκ°λ‘ μνν΄μΌ νλ€.
- μμ±μ μ‘μΈμ€ ν λ, μμ±μ΄ λ³κ²½λ λ Observation μ μλ¦¬κΈ°λ§ νλ©΄λλ€.
ObservableObject
μ΄μ μ λ°©μμΈ ObservableObject λ₯Ό Observable 맀ν¬λ‘λ₯Ό μ¬μ©νλλ‘ λ³κ²½νλ λ°©λ²
- ObservableObject μ±νμ μ κ±°νλ€.
- κ° μμ±μ μ€μ λ @Published λ₯Ό μ κ±°νλ€.
- Observable 맀ν¬λ‘λ₯Ό νμνλ€.
View μμ μμ±μ μ€μ νλ @ObservedObject, @EnvironmentObject` λ±μ νλ‘νΌν° λνΌ
- @ObservedObject λ μ κ±°λκ³ , νμν κ²½μ° @Bindable μ νμ©νλ€.
- @EnvironmentObject λνΌλ @Environment λ‘ λ³κ²½λμλ€.
λΆνμν μ£Όμμ΄ μ¬λΌμ§κ³ , μΈκ°μ§ @State, @Environment @Bindable property wrapper λ§ λ¨μμ λ μμ±νκΈ° μ¬μμ‘λ€.
- κΈ°μ‘΄μ ObservableObject μ λΉν΄ Observable 맀ν¬λ‘λ λͺ¨λΈ λ¨μν, μ±λ₯ ν₯μ κ°λ₯νλ€ !
- μμ§μ ν·κ°λ €μ π
'π iOS > WWDC' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] WWDC23: Meet ActivityKit / Live Activity μμ보기 (0) | 2023.10.09 |
---|---|
[WWDC2017] Love at First Launch (0) | 2023.05.24 |
[WWDC21] Discover concurrency in SwiftUI (1) | 2023.05.18 |
[WWDC20] The Push Notifications primer (APNs / iOS νΈμ λ±λ‘) (0) | 2023.02.14 |
[WWDC18] iOS Memory Deep Dive (2) | 2022.11.27 |