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.7k
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
170
Meet the Translation API
akkie76
0
420
コードレビューで開発を加速させるAIコードレビュー
akkie76
1
670
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
6k
コードレビューを支援するAI技術の応用
akkie76
5
1.2k
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
9.3k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
1.1k
TextField 表示スタイル変更の 有効活用例 5 選
akkie76
0
730
rememberUpdatedState の使いどころを考える
akkie76
0
610
Other Decks in Technology
See All in Technology
データエンジニアとして生存するために 〜界隈を盛り上げる「お祭り」が必要な理由〜 / data_summit_findy_Session_1
sansan_randd
1
960
re:Inventに行くまでにやっておきたいこと
nagisa53
0
1k
Raycast AI APIを使ってちょっと便利なAI拡張機能を作ってみた
kawamataryo
1
250
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
400
GPUをつかってベクトル検索を扱う手法のお話し~NVIDIA cuVSとCAGRA~
fshuhe
0
380
The Twin Mandate of Observability
charity
1
360
Mackerelにおけるインシデント対応とポストモーテム - 現場での工夫と学び
taxin
0
110
Amazon Q Developer CLIをClaude Codeから使うためのベストプラクティスを考えてみた
dar_kuma_san
0
340
Snowflakeとdbtで加速する 「TVCMデータで価値を生む組織」への進化論 / Evolving TVCM Data Value in TELECY with Snowflake and dbt
carta_engineering
0
160
最近読んで良かった本 / Yokohama North Meetup #10
mktakuya
0
880
今のコンピュータ、AI にも Web にも 向いていないので 作り直そう!!
piacerex
0
650
JAWS UG AI/ML #32 Amazon BedrockモデルのライフサイクルとEOL対応/How Amazon Bedrock Model Lifecycle Works
quiver
1
830
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
950
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
GitHub's CSS Performance
jonrohan
1032
470k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
What's in a price? How to price your products and services
michaelherold
246
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 !