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.5k
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
310
コードレビューで開発を加速させるAIコードレビュー
akkie76
1
500
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
4.3k
コードレビューを支援するAI技術の応用
akkie76
5
850
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
8.2k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
670
TextField 表示スタイル変更の 有効活用例 5 選
akkie76
0
630
rememberUpdatedState の使いどころを考える
akkie76
0
480
M3 NavigationBar をマスターする
akkie76
0
890
Other Decks in Technology
See All in Technology
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
970
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.5k
OpenID Connect for Identity Assurance の概要と翻訳版のご紹介 / 20250219-BizDay17-OIDC4IDA-Intro
oidfj
0
280
(機械学習システムでも) SLO から始める信頼性構築 - ゆる SRE#9 2025/02/21
daigo0927
0
120
室長と気ままに学ぶマイクロソフトのビジネスアプリケーションとビジネスプロセス
ryoheig0405
0
370
データの品質が低いと何が困るのか
kzykmyzw
6
1.1k
バックエンドエンジニアのためのフロントエンド入門 #devsumiC
panda_program
18
7.5k
関東Kaggler会LT: 人狼コンペとLLM量子化について
nejumi
3
590
『衛星データ利用の方々にとって近いようで触れる機会のなさそうな小話 ~ 衛星搭載ソフトウェアと衛星運用ソフトウェア (実物) を動かしながらわいわいする編 ~』 @日本衛星データコミニティ勉強会
meltingrabbit
0
150
Building Products in the LLM Era
ymatsuwitter
10
5.5k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
2025-02-21 ゆるSRE勉強会 Enhancing SRE Using AI
yoshiiryo1
1
360
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
410
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Optimizing for Happiness
mojombo
376
70k
Docker and Python
trallard
44
3.3k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
Automating Front-end Workflow
addyosmani
1368
200k
Why Our Code Smells
bkeepers
PRO
336
57k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
A designer walks into a library…
pauljervisheath
205
24k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
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 !