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
4
4.8k
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
Graph Art with Charts API – Beyond Data Visualization
akkie76
0
200
Meet the Translation API
akkie76
0
440
コードレビューで開発を加速させるAIコードレビュー
akkie76
1
690
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
6.1k
コードレビューを支援するAI技術の応用
akkie76
5
1.2k
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
9.6k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
1.1k
TextField 表示スタイル変更の 有効活用例 5 選
akkie76
0
740
rememberUpdatedState の使いどころを考える
akkie76
0
660
Other Decks in Technology
See All in Technology
Lambda Durable FunctionsでStep Functionsの代わりはできるのかを試してみた
smt7174
2
150
Amazon ElastiCacheのコスト最適化を考える/Elasticache Cost Optimization
quiver
0
210
セキュリティ はじめの一歩
nikinusu
0
710
re:Inventで見つけた「運用を捨てる」技術。
ezaki
1
150
Claude in Chromeで始める自律的フロントエンド開発
diggymo
1
280
ビジュアルプログラミングIoTLT vol.22
1ftseabass
PRO
0
140
Agentic Coding 実践ワークショップ
watany
41
27k
「AIでできますか?」から「Agentを作ってみました」へ ~「理論上わかる」と「やってみる」の隔たりを埋める方法
applism118
8
6.1k
プロダクトエンジニアこそ必要なPMスキル 〜デリバリー力を最大化し、価値を届け続けるために〜
layerx
PRO
0
140
エンジニアとマネジメントの距離/Engineering and Management
ikuodanaka
3
650
Exadata Database Service ソフトウェアのアップデートとアップグレードの概要
oracle4engineer
PRO
1
1.2k
DatabricksホストモデルでAIコーディング環境を構築する
databricksjapan
0
190
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
150
My Coaching Mixtape
mlcsv
0
41
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Designing for Timeless Needs
cassininazir
0
120
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The untapped power of vector embeddings
frankvandijk
1
1.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
130
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
120
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 !