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
SwiftUIにおけるPreferenceの基礎概念
Search
Kota Minato
May 21, 2025
Technology
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SwiftUIにおけるPreferenceの基礎概念
Kota Minato
May 21, 2025
More Decks by Kota Minato
See All by Kota Minato
design docで開発効率を向上させる
kotaminato
0
140
Other Decks in Technology
See All in Technology
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
130
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
1.9k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Bedrock AgentCore RuntimeでAuth0 Changelog調査AIをアップグレードした話
t5u8a5a
1
160
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
1.1k
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
220
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
130
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
250
フィジカル版Github Onshapeの紹介
shiba_8ro
0
260
やさしいA2A入門
minorun365
PRO
12
1.9k
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
190
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Tell your own story through comics
letsgokoyo
1
950
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Navigating Weather and Climate Data
rabernat
0
220
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Context Engineering - Making Every Token Count
addyosmani
9
960
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
© 2025 Wantedly, Inc. SwiftUIにおける Preferenceの基礎概念 Mobile勉強会#20 ウォンテッドリー×チームラボ×Sansan May.21 2025
- kota minato
© 2025 Wantedly, Inc. 自己紹介
© 2025 Wantedly, Inc. 話すこと 01 Preferenceとはなにか ? 02 Binding
vs Environment vs Preference 03 Wantedlyでの活用事例
© 2025 Wantedly, Inc. 話すこと 01 Preferenceとはなにか ? 02 Binding
vs Environment vs Preference 03 Wantedlyでの活用事例
© 2025 Wantedly, Inc. Preferenceとはなにか? ずばり、SwiftUIにおいて、子Viewから親Viewへ値を伝達する仕組み 通常データは親Viewから子Viewへ流れるがPreferenceを用いると子Viewから親Viewへの一方通行 のデータの受け渡しが可能になる
© 2025 Wantedly, Inc. どういったときにPreferenceを使うのか? レイアウト情報やサイズ情報を親Viewに 伝える必要がある場合に有用 もっと具体的には ? ScrollView内の子Viewの位置を取得し、親Viewで制御し
たい場合など
© 2025 Wantedly, Inc. 話すこと 01 Preferenceとはなにか ? 02 Binding
vs Environment vs Preference 03 Wantedlyでの活用事例
© 2025 Wantedly, Inc. Binding vs Environment vs Preference Binding、Environment、Preferenceを比較してみる
@Environmentは上位View→下位Viewへの一方向の値注入 (広い範囲で共通の値を共有 ) @Bindingは親View→子Viewへの双方向の値注入 (データの保有者は親 View) Preferenceは子View→親Viewへの一方向の値注入 データの矢印の向きが異なります!
© 2025 Wantedly, Inc. 話すこと 01 Preferenceとはなにか ? 02 Binding
vs Environment vs Preference 03 Wantedlyでの活用事例
© 2025 Wantedly, Inc. Wantedlyでの活用事例 下スクロールを検知でボタンを非表示にしてほしい!
© 2025 Wantedly, Inc. Wantedlyでの活用事例 実装方針は子Viewのスクロールを検知して親 Viewでボタン を非表示にする処理を行おう! でもどうやって子Viewから親Viewに通知しよう☹ 画面構成としては親Viewの中に子Viewが入っている!
© 2025 Wantedly, Inc. Wantedlyでの活用事例 Preference
© 2025 Wantedly, Inc. どうやって実装するのか PreferencesKeyに準拠したstructを作成 • PreferencesKeyに準拠するために必要なのはdefaultValue とreduce。 •
defaultValue = 何も入れなかったときの値 • reduce = 子Viewが入れた値を親Viewが受け取るときの変 換処理を書く 今回はOffSetを常に更新して取得したかったので Valueに対してnextValueを加算していま す。
© 2025 Wantedly, Inc. どうやって実装するのか • .preference(key: ScrollOffset.self, value: 値
) 子Viewから親Viewへ値を流す ※ 画面に影響を与えないようにColor.Clearを使用して値を取得します
© 2025 Wantedly, Inc. どうやって実装するのか 親Viewで値を受け取る ボタン非表示アニメーションを追加 (詳細は割愛) • .onPreferenceChange(ScrollOffset.self
) {}
© 2025 Wantedly, Inc. Wantedlyでの活用事例 うまくできた🎉
© 2025 Wantedly, Inc. まとめ • PreferenceはViewの子から親に値を渡す仕組み • PreferenceKeyを実装することによって子 View側で値を入れ親側で
.onPreferenceChengeで受け取 ることができる
© 2025 Wantedly, Inc. ご清聴ありがとうございまし た!