Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Observationではじめる値監視
Search
akkiee76
February 07, 2024
Technology
3
3.3k
Observationではじめる値監視
「potatotips #86 iOS/Android開発Tips共有会」で発表した資料になります。
https://potatotips.connpass.com/event/307311/
akkiee76
February 07, 2024
Tweet
Share
More Decks by akkiee76
See All by akkiee76
Meet the Translation API
akkie76
0
150
コードレビューで開発を加速させるAIコードレビュー
akkie76
0
160
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
1.2k
コードレビューを支援するAI技術の応用
akkie76
5
590
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
7.1k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
320
TextField 表示スタイル変更の 有効活用例 5 選
akkie76
0
420
rememberUpdatedState の使いどころを考える
akkie76
0
280
M3 NavigationBar をマスターする
akkie76
0
650
Other Decks in Technology
See All in Technology
AWSサービスメニュー開発をしていてAWSを好きだ!と感じた瞬間
toru_kubota
0
130
AI研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
130
AOAI Dev Day - Opening Session
yoshidashingo
2
430
スタートアップにおける組織設計とスクラムの長期戦略 / Scrum Fest Kanazawa 2024
yoshikiiida
13
3.6k
MySQLのロックの種類とその競合
yoku0825
6
1.6k
dxd2024-生成AIに振り回された3か月間の成功と失敗/dxd2024-link-and-motivation
lmi
2
260
[I/O Extended Android 2024] What`s new in Android 2024
kyeongwan
0
220
シフトレフトで挑む セキュリティの生産性向上
sekido
PRO
0
270
[NIKKEI Tech Talk]Bias for Action!! 実践から学ぶための仕組とコミュニティ / Community for Practice and Learning
kanamasa
0
260
VPoEの視点から見た、ヘンリーがサーバーサイドKotlinを使う理由 / Why Server-side Kotlin 2024
cho0o0
1
420
20240717_イケコパ代表Copilot_in_Teams会社でこう使ってます
ponponmikankan
2
430
AutomatedLabを使って内部ペンテストを勉強しよう! -やられ社内ネットワークの自動構築-
n_etupirka
1
610
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
4
590
Embracing the Ebb and Flow
colly
81
4.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.8k
What's new in Ruby 2.0
geeforr
338
31k
Creatively Recalculating Your Daily Design Routine
revolveconf
214
11k
Side Projects
sachag
451
42k
Web development in the modern age
philhawksworth
203
10k
Designing with Data
zakiwarfel
96
5k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
Speed Design
sergeychernyshev
9
270
Transcript
©2024 RAKUS Co., Ltd. Observationではじめる値監視 potatotips #86 iOS/Android開発Tips共有会 2024/02/07 @akkiee76
自己紹介 • Akihiko Sato • Rakus Inc. • 楽楽精算 •
@akkiee76 / X 2
今日のテーマ Observation フレームワークの概要を紹介 3
Observation フレームワークとは? • Swift 5.9 から導入された新しい値監視のフレームワーク ◦ ハイパフォーマンスなデータバインディングが期待される ◦ iOS
17.0 以上で使用可能 4 https://developer.apple.com/documentation/observation
これまでの値監視のフレームワーク • KVO(Key-Value Observing) ◦ プロパティの変更を監視し、他のオブジェクトに通知するデザインパターン • Combine ◦ 変更値を宣言的に記述できる非同期処理のフレームワーク
5
なぜ Observation が登場したのか 🤔 6
swift-evolution / 0395-observability.md • KVO(Key-Value Observing) ◦ NSObjectの継承、@Objc の宣言が必要 ◦
内部的には文字列指定で扱われる(型安全性への懸念) • Combine ◦ 非 SwiftUI での使用での制約 ◦ @Published の宣言が開発者にとって冗長 7 https://github.com/apple/swift-evolution/blob/main/proposals/0395-observability.md
Observation による値監視実装の基本 🛠 1. 値監視の基本ケース 2. 値監視の対象から外すケース 3. 値更新時に何らかの処理をするケース 8
1. 値監視の基本ケース 9
// User.swift @Observable class User { private(set) var nickName =
"" func updateNickName(_ newValue: String) { nickName = newValue } } 10 値を監視する class に @Observable マクロを宣言
// ContentView.swift struct ContentView: View { @State var text =
"" @State var user = User() var body: some View { VStack { TextField("Enter text", text: $text, onEditingChanged: { _ in }, onCommit: { user.updateNickName(text) }) .padding() Text(user.nickName) } } } 11 @State Property Wrapper で保持 nickName を監視
Observable マクロを付与することで、 対象クラスのプロパティが監視可能に 💪 12
2. 値監視の対象から外すケース 13
// User.swift @Observable class User { @ObservationIgnored private(set) var nickName
= "" func updateNickName(_ newValue: String) { nickName = newValue } } 14 @ObservationIgnored マクロで 値監視の対象外に
ObservationIgnored マクロを付与することで、 対象プロパティを監視から外すことが可能 💪 15
3. 監視対象プロパティの更新時に 何らかの処理を行うケース 16
withObservationTracking func withObservationTracking<T>( _ apply: () -> T, onChange: @autoclosure
() -> () -> Void ) -> T withObservationTracking を使用することで、値更新時に任意の処理が可能 17 • apply closure ◦ 監視対象にアクセスすることでプロパティを監視対象にできる • onChange closure ◦ 対象プロパティが変更された場合、一度呼び出される https://developer.apple.com/documentation/observation/withobservationtracking(_:onchange:)
func addTracking() { withObservationTracking { print(user.nickName) } onChange: { self.showConfirmDialog()
} } func showConfirmDialog() { // user.nickNameをダイアログ表示 } 18 値監視の対象の プロパティにアクセス onChangeが一度だけ実行 継続的に値監視する場合は再帰処理が必要
まとめ Observation 基本的な使い方を紹介しました。 iOS 17 以上で使用が可能なので、実践導入は現実的ではありませんが、 今後のデファクトスタンダードになるでしょう。
Thank you !