SwiftUI
基本のき
ObservableObject
@ObservedObject
@StateObject
@EnvironmentObject
SwiftUI の情報源
プロセス (App/Scene/View) の Lifetime (SwiftUI) に紐づく
定数値: 値が変化しない場合
@State: 値がViewに紐づいて変化する場合
@Binding: 値が別のViewに紐づいて変化する場合
@StateObject: ObservableObject をViewに紐付けたい場合
永続化される
@SceneStorage: アプリの Scene 毎に永続化して、Scene の再起動時にも保持される
@AppStorage: 裏では UserDefaults が使われる
Data Essentials in SwiftUI - WWDC 2020
Transaction
https://qiita.com/maiyama18/items/bc55b38ffe2ff641f45b
Animation
Namespace
PreferenceKey
Swift 5.1 に導入される Opaque Result Type とは何か
swift-evolution/0258-property-delegates.md at master
iOSDC2018で紹介されていたdynamicMemberLookupに感動したので深掘りする
#keyPathとKeyPath
View
Scene
App
View の基本
Modifier
View の外観や動作をカスタマイズする
property wrapper
Commands
What's new in SwiftUI - WWDC 2020
Introduction to SwiftUI - WWDC 2020
App essentials in SwiftUI - WWDC 2020
Data Essentials in SwiftUI - WWDC 2020
Structure your app for SwiftUI previews - WWDC 2020
Stacks, Grids, and Outlines in SwiftUI - WWDC 2020
SwiftUI と Grid
https://blog.logrocket.com/understanding-the-swiftui-grid-layout/
https://swiftui-lab.com/impossible-grids/
https://www.fivestars.blog/articles/swiftui-share-layout-information/
View Preference について
下流から上流にあたいを流すのに利用する
PreferenceKey に適合した値を用意する
reduce は同階層の View 同士の Preference の競合の解決に利用される
下流で View Modifier である preference(key:value:) を利用する
onPreferenceChange で上流で読み取る
backgroundPreferenceValue(_:_:) で、Preference を読み取りつつ background に View を差し込める
overlayPreferenceValue(_:_:) で Preference を読み取りつつ手前に View を差し込める
transformPreference() で、下流から上流までの間で preference の書き換えを行える
SwiftUI のレイアウト処理
親Viewが子Viewにサイズ案を提示する
子Viewが自身のサイズを決定する (親Viewが子Viewのサイズを決定することはできない)
親Viewが自身の座標空間に子Viewを配置する (RootViewの場合は中心に配置される)
GeometryReader
View の一種
親のレイアウトの推奨サイズにアクセスできる View
GeometryProxy として提供される
上流のレイアウト情報を下流に流すのに利用できる
anchorPreference
GeometryReader は上流から下流にレイアウト情報を流すが、anchorPreference は逆で、下流のレイアウト情報を上流に流す
https://crystalminds.medium.com/introducing-view-preferences-in-swiftui-e193c346b68d
PreferenceKey の reduce について
https://medium.com/swlh/dissecting-the-reduce-method-on-preferencekey-8a3571cfbc2b
Structure your app for SwiftUI previews - WWDC 2020
Build document-based apps in SwiftUI
Environment
https://developer.apple.com/documentation/swiftui/environment
Toolbar
help modifier
What's new in SwiftUI - WWDC 2020
List, Collection
Stacks, Grids, and Outlines in SwiftUI - WWDC 2020
Collection の挿入/削除を綺麗にアニメーションさせる
matchedGeometryEffect(id:in:properties:anchor:isSource:) を利用する
SwiftUI がフレームを補完し、シームレスな遷移を実現できる
SwiftUI View Lifecycle
https://zenn.dev/bannzai/articles/20557106b4ba7b
https://www.vadimbulavin.com/swiftui-view-lifecycle/
https://www.objc.io/books/thinking-in-swiftui/
WWDC Videos
done
Data Essentials in SwiftUI - WWDC 2020
Demystify SwiftUI performance - WWDC 2023
Discover Observation in SwiftUI - WWDC 2023
Build accessible apps with SwiftUI and UIKit - WWDC 2023
Explore SwiftUI animation - WWDC 2023
Animate with springs - WWDC 2023
Wind your way through advanced animations in SwiftUI - WWDC 2023
next
The SwiftUI cookbook for navigation - WWDC 2022
The craft of SwiftUI API design: Progressive disclosure - WWDC 2022
todo
Build programmatic UI with Xcode Previews - WWDC 2023
Meet StoreKit for SwiftUI - WWDC 2023
The SwiftUI cookbook for focus - WWDC 2023
Inspectors in SwiftUI: Discover the details - WWDC 2023
Beyond scroll views - WWDC 2023
Efficiency awaits: Background tasks in SwiftUI - WWDC 2022
Use SwiftUI with AppKit - WWDC 2022
Use SwiftUI with UIKit - WWDC 2022
Bring multiple windows to your SwiftUI app - WWDC 2022
Compose custom layouts with SwiftUI - WWDC 2022
SwiftUI on iPad: Add toolbars, titles, and more - WWDC 2022
SwiftUI on iPad: Organize your interface - WWDC 2022