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
2025.01.17_Sansan × DMM.swift
Search
RioFujimon
January 17, 2025
Programming
1.1k
3
Share
2025.01.17_Sansan × DMM.swift
2025.01.17 に Sansan × DMM.swift で発表したスライド
RioFujimon
January 17, 2025
More Decks by RioFujimon
See All by RioFujimon
Foundation Models を 活用するための Tips
riofujimon
1
350
実践 Realtime API 〜入力として音声データを扱う〜
riofujimon
1
100
Realtime API 入門
riofujimon
0
370
Let's learn code review
riofujimon
3
1.3k
Other Decks in Programming
See All in Programming
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
180
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
1k
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
860
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
250
2026_04_15_量子計算をパズルとして解く
hideakitakechi
0
110
UIの境界線をデザインする | React Tokyo #15 メイントーク
sasagar
2
380
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
280
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
800
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
420
🦞OpenClaw works with AWS
licux
1
230
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
440
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
660
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
160
[SF Ruby Conf 2025] Rails X
palkan
2
980
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Producing Creativity
orderedlist
PRO
348
40k
New Earth Scene 8
popppiees
3
2.1k
The SEO Collaboration Effect
kristinabergwall1
1
430
Ruling the World: When Life Gets Gamed
codingconduct
0
210
AI: The stuff that nobody shows you
jnunemaker
PRO
6
590
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
330
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
130
Transcript
Pro SwiftUI ΛಡΜͰಘΒΕͨࣝ Sansan × DMM.swift 2025 / 01 /
17 ౻ ᣦੜ ʙ SwiftUI ͷಈ࡞ݪཧΛཧղ͢Δ ʙ
ࣗݾհ • ౻ᣦੜʢRio Fujimonʣ • Sansanגࣜձࣾ Eight Engineering Unit Mobile
Application άϧʔϓ • ৽ଔ 2 • Eight iOS ΞϓϦͷ։ൃΛ୲ • XʢTwitterʣ ͪ͜Β
SwiftUI Λཧղͯ͑ͯ͠·͔͢ʁ
͕ࣗॻ͍ͨ SwiftUI ίʔυͷ ಈ࡞ݪཧΛઆ໌Ͱ͖·͔͢ʁ
SwiftUI ͷίʔυಈ͍͔ͨΒྑ͠ 🙆 ʹͳͬͯ·ͤΜ͔ʁ
😨 ແཧ͔ͱ ࢥͬͨਓ͍ΔͷͰͳ͍Ͱ͠ΐ͏͔ʁ
ͦΜͳਓͷୈҰา
ࠓ͓͢͠Δ͜ͱ 1. SwiftUI ͷϨΠΞτϓϩηε 2. Parent View ͱ Child View
ͷؔ 3. View Size ͷमਖ਼ 4. View ͷϨΠΞτதཱੑ 5. View Identity ͷཧղ
SwiftUI ͷϨΠΞτϓϩηε
SwiftUI ͷϨΠΞτϓϩηε 1. Parent View ͕ Child View ʹαΠζΛఏҊ͢Δɻ 2.
Child View ɺParent View ͷఏҊใʹج͍ͮͯɺ αΠζΛબ͠ɺParent View બΛଚॏ͢Δɻ 3. Parent View ɺChild View Λ࠲ඪۭؒʹஔ͢Δɻ 💡ॏཁʢઈରཧղʣ
Parent View ͱ Child Viewͷؔ
ᶃ Parent View ͱ Child ViewͷؔΛճͰ͖Δʁ
ᶃ Parent View ͱ Child Viewͷؔ Parent View Child View
ᶄ Parent View ͱ Child ViewͷؔΛճͰ͖Δʁ
Parent View ͱ Child Viewͷؔ Parent View Child View ্هͷཧղ͚ͩͩͱɺෆे
🙅
Parent View ͱ Child Viewͷؔ Parent View Child View .frame()
ͷద༻ʹΑΓ Text Λϥοϓ͢Δ View Λੜ
Parent View ͱ Child ViewͷؔΛग़ྗ
Parent View ͱ Child ViewͷؔΛग़ྗ݁Ռ .frame() ͷద༻ʹΑΓɺModi f iedContent ͕ੜ͞ΕΔ
💡ॏཁʢઈରཧղʣ ݩͷ View Λ܁Γฦ͠มߋ͍ͯ͠ΔΘ͚Ͱͳ͘ɺ ݩͷViewΛมߋ͢Δ৽͍͠ View Λద༻͍ͯ͠Δ
ʢࢀߟʣModi f iedContent ͷఆٛ
.modi f ier() ͷద༻Ͱى͖͍ͯΔ͜ͱ .modi f ier() ͷద༻ = Modi
f iedContentΛੜ
View Size ͷमਖ਼
. f ixedSize() ͕ͲͷΑ͏ʹαΠζΛमਖ਼͍ͯ͠Δͷ͔આ໌Ͱ͖·͔͢ʁ . f ixedSize() Λద༻
SwiftUI ͰϨΠΞτΛܾఆ͢ΔͨΊͷ6ͭͷ 1. Minimum Width ͱ Minimum Height - View
͕ड͚ೖΕΔ࠷খݶͷ Space - ࠷খΑΓখ͍͞ Space ແࢹ͞Εɺ View ͕ఏҊ͞Εͨ Space ͔ΒΈग़͢ 2. Maximum Width ͱ Maximum Height - View ͕ड͚ೖΕΔ࠷େݶͷ Space - ࠷େΑΓେ͖͍ Space ແࢹ͞Εɺ Parent View Γͷ Space Ͱ Child View Λஔ͢Δ 3. Ideal Width ͱ Ideal Heightʢཧͷ෯ ͱ ཧͷߴ͞ʣ - View ͕Ήཧతͳ Space - ࠷খ͔Β࠷େͷൣғʹऩ·Δඞཁ͕͋Δ - ʢྫʣText ͷࣗવαΠζʢจࣈΛ1ߦʹऩΊΔͨΊʹదͨ͠ཧతͳ෯ͱߴ͞ʣ 💡ॏཁʢઈରཧղʣ
. f ixedSize() ͷ෦తͳಈ࡞ 30 × 100 30 × 100
Ideal Sizeɿ95 × 20 Ideal Size ΑΓ খ͍͞Մೳ Text ͷ Ideal Size
. f ixedSize() . f ixedSize() Λద༻ 💡. f ixedSize()
ɿཧαΠζΛݻఆαΠζʹঢ֨ͤ͞Δ
. f ixedSize() ͷ Image ͷద༻ ը໘෯ʹऩ·Βͳ͍ը૾ 300 × 100
ը૾ ͷ Ideal Size 300 × 100 Ideal Size ͘͠ Ideal Size ΑΓ খ͍͞Մೳ
View ͷϨΠΞτதཱੑ
Color.red ͷαΠζܾఆͷΈΛઆ໌Ͱ͖·͔͢ʁ .background(.red) ͱͯ͠ Color.red Λར༻
View ͷϨΠΞτதཱੑ ଞͷϏϡʔίϯςφͱͷΈ߹ΘͤʹΑͬͯॊೈʹࣗͷαΠζΛదԠͤ͞Δಛੑ ϨΠΞτதཱੑɺҎԼͷ 6 ͭͷ࣍ݩ ͕Өڹ͢Δ 1. Minimum Width
2. Minimum Height 3. Maximum Width 4. Maximum Height 5. Ideal Width 6. Ideal Height
Color.red ͷαΠζܾఆͷΈ ᶃ Parent View ͷαΠζΛड͚ೖΕΔ
Color.red ͷαΠζܾఆͷΈᶄ ը໘શମαΠζ ը໘શମαΠζ ϨΠΞτதཱ minWidth ͱ minHeight ϨΠΞτதཱ
࠷খҎ֎ͷ4ͭͷ Ideal Widthɿ95 Ideal Heightɿ20 Max Widthɿ95 Max Heightɿ20 300 200 Ideal Widthɿ300 Ideal Heightɿ200 Max Widthɿ95 Max Heightɿ20
View Identity ͷཧղ
View Identity View ΛҰҙʹࣝผ͠ɺ View ͷঢ়ଶදࣔ༰Λཧ͢ΔͨΊʹར༻͞ΕΔ 1. Explicit Identityʢ໌ࣔతͳΞΠσϯςΟςΟʣ •
ಛఆͷ View ʹରͯ͠ɺ.id() Λར༻ͯ͠໌ࣔతͳ Identity Λࢦఆ • ಈతͳσʔλΛѻ͏߹ʢྻͷ܁Γฦ͠ॲཧʣ • ಛఆͷ View Λࢀর͢Δඞཁ͕͋Δ߹ʢಛఆͷҐஔͷεΫϩʔϧॲཧʣ 2. Structural IdentityʢߏతͳΞΠσϯςΟςΟʣ • ίʔυͰͷஔߏʹج͍ͮͯɺࣗಈతʹੜ͞Εͨ Identity
View Identity ʹؔ࿈ͨ͠ SwiftUI ͷޡղ View ֊ʹมߋΛՃ͑Δͱɺ View πϦʔͷࠩൺֱΛߦ͍ɺԿ͕มߋ͞Ε͔ͨΛஅ͢Δ ※
View πϦʔͷࠩൺֱɿՃআ͞ΕͨཁૉΛಛఆ͢Δϓϩηε 🙅 🙆 SwiftUI ɺIdentity Λجʹ View Λࣝผ͠ɺঢ়ଶมߋΛޮతʹཧ͢Δ View ͷ Identity Λ໌ࣔతʹࢦఆ͢Δ͜ͱ͕ɺదͳߋ৽ͱ࠶ඳըͷ伴 Swift ͷίϯύΠϥɺView ͷίʔυΛߏங͢ΔࡍʹҎԼͷใΛશͯѲ ʢSubView, modi f ier, ݅จ, ܁Γฦ͠ॲཧʣ
View Identity ͱ View ͷ Life Cycle • View Identify
ɺView ͷ Life Cycle Λܾఆ • View Identity ͕ߏత·ͨ໌ࣔతʹมߋ͞ΕΔͱɺͦͷ View ഁغ͞ΕΔ • View Identity ཧɺView ͷঢ়ଶҡ࣋ޮతͳ࠶ඳըʹ݁͢Δ
ࠨӈͲͪΒͷ SwiftUI ͷίʔυʹ͕͋Δ͔આ໌Ͱ͖·͔͢ʁ
ࠨଆͷ SwiftUI ͷίʔυͷ View ͷߏΛग़ྗ݁Ռ _ConditionalContent ʹΑΓɺtrue ͱ false ͷ࣌Ͱɺ
2ͭͷผʑͷܕͱͯ͠ѻ͍ɺҟͳΔ Identity ͷ ExampleView ͱղऍ Toggle ͢Δ͝ͱʹɺ࠶ϨϯμϦϯά͞Εɺ View ͷঢ়ଶഁغ͞ΕΔ
ʢࢀߟʣ_ConditinalContent ͷॳظԽ xed /Applications/Your_Xcode_Name.app/Contents/Developer/Platforms/ iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/ Frameworks/SwiftUI.framework/Modules/SwiftUI.swiftmodule/x86_64-apple-ios- simulator.swiftinterface .swiftinterface Λ։͘͜ͱͰ֬ೝ͢Δ͜ͱ͕Ͱ͖Δ 👀
ӈଆͷ SwiftUI ͷίʔυͷ View ͷߏΛग़ྗ݁Ռ @ViewBuilder ͕ద༻͞Εͣɺ_ConditionalContent Λճආͯ͠ɺ AnyView ͱͳΓɺܕͱ֊ͷҐஔʹج͍ͮͯɺ
View ΛಉҰͷ Identity ͱͯ͠ཧ͍ͯ͠Δ Toggle ͯ͠ɺ࠶ϨϯμϦϯά͞Εͣɺ View ͷঢ়ଶอ࣋͞ΕΔ
SwiftUI ͷίʔυΛࡾ߲ԋࢉࢠΛར༻ͯ͠هड़ 1. AnyView → ExampleView ʹͳΓܕ໌֬ʹͳΔ 2. Structural IdentityʢߏతΞΠσϯςΟςΟʣ
͕ શͯॲཧΛ୲͏ঢ়ଶʹͳΔ ࡾ߲ԋࢉࢠΛར༻ͯ͠هड़͢Δ
ҎԼͷ༰ཧղͰ͖ͨͰ͠ΐ͏͔ʁ 1. SwiftUI ͷϨΠΞτϓϩηε 2. Parent View ͱ Child View
ͷؔ 3. View Size ͷमਖ਼ 4. View ͷϨΠΞτதཱੑ 5. View Identity ͷཧղ
ଞʹ༷ʑͳใ͕ܝࡌ͞Ε͍ͯΔͷͰɺಡΜͰΈ͍ͯͩ͘͞
Thank You For Listening