Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Demystify SwiftUI 要約 / Summary of Demystify Swi...
Search
Elvis Shi
June 28, 2021
Programming
760
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Demystify SwiftUI 要約 / Summary of Demystify SwiftUI
Elvis Shi
June 28, 2021
Transcript
20 slides
%FNZTUJGZ4XJGU6*ཁ f o r : 6 . & .
* T X J G U G F BU ) " , "5" T X J G U ʙ 8 8 % $ 3F DBQ ʙ
} var employedBy = "YUMEMI Inc." var job = "iOS
Tech Lead" var favoriteLanguage = "Swift" var twitter = "@lovee" var qiita = "lovee" var github = "el-hoshino" var additionalInfo = """ ΠψͰ͕͢ɺԿ͔ʁ """ final class Me: Developable, Talkable {
˞ೣͰྫΛ্͍͛ͯ·͕͢ɺൃදऀΠψͰ͢ɻ
࣌ؒ ҧ͏࣌ؒͷ ಉ͡ೣʁ
࣌ؒ ͦͦ ҧ͏ೣʁ
ࣸਅ͚ͩͰஅ͕Ͱ͖ͳ͍ w ҧ͏ೣͰͱͯࣅͯΔ͔͠Εͳ͍ w ಉ͡ೣͰ࣌ظʹΑͬͯݟ͕ͨҧ͏͔͠Εͳ͍ w அ͢ΔͨΊʹՃͷใ͕ඞཁ w ໊લ w
࠼ w FUD *EFOUJUZ
4XJGU6*Λཧղ͢ΔͨΊͷେϙΠϯτ w *EFOUJUZ w -JGFUJNF w %FQFOEFODZ 4XJGU6*͕͋ͳͨͷࢥ͏௨Γͷಈ࡞Λ͍ͯ͠ͳ͔ͬͨΒɺ େ͜ΕΒͷѻ͍͕ؒҧ͍ͬͯΔ͔Βɻ
*EFOUJUZ w େϙΠϯτͷதͰҰ൪ॏཁ w -JGFUJNF%FQFOEFODZɺ*EFOUJUZ͕͋Δ͔Β ͦ͜Γཱͭ w 4XJGU6*ʹछྨͷ*EFOUJUZ͕͋Δ w &YQMJDJU*EFOUJUZʢ໌ࣔత*%ʣ
w 4USVDUVSBM*EFOUJUZʢߏత*%ʣ
&YQMJDJU*EFOUJUZ w ಈతʹมΘΔϏϡʔʹɺ ΤϯδχΞ͕͚ͭΔ*% w ର͕Identifiable ʹద߹͍ͯ͠ͳ͍߹ *%ͷKeyPathΛࢦఆ ͢Δඞཁ͕͋Δ ForEach(cats,
id: \.name) { cat in Text("\(cat.age)ࡀ") } Explicit Identity
&YQMJDJU*EFOUJUZʹٻΊΒΕΔੑ࣭ w ϢχʔΫੑ w ଞͷରͱඃ͍ͬͯ ͚ͳ͍ w ෆมੑ w ͍ͭɺԿճݺͼग़ͯ͠
มΘ͍͚ͬͯͳ͍ ForEach(cats, id: \.name) { cat in Text("\(cat.age)ࡀ") } Explicit Identity
4USVDUVSBM*EFOUJUZ w ߏʹΑͬͯࣗಈతʹ ͚ΒΕΔ*% w JGจTXJUDIจͷذ ͕͋ͬͨΒҧ͏*%͕ ͚ΒΕΔ Structural Identity
if flag { Text("A") } else { Text("B") }
4USVDUVSBM*EFOUJUZͱͷ͖߹͍ํ w ಉ͡ϏϡʔͳΒɺذΛ ͯ͠ߦ͚ͳ͍ w ذΛͤͣʹ͏·͘ *OFSU.PEJ fi FSͳͲΛ ׆༻
Structural Identity if flag { Text("A") } else { Text("B") } ద༻ͯ͠ϏϡʔͷඳըʹӨڹ͠ͳ͍.PEJ fi FSɻ PQBDJUZ QBEEJOH FUD
ͳͥ*EFOUJUZ͕ॏཁ͔ w "OJNBUJPO͢Δͱ͖ͳͲͷஅࠜڌ w Ҡಈ͖͔͢ΫϩεϑΣʔυ͖͔͢ w Ϗϡʔͷ-JGFUJNFΛܾΊΔࠜڌ w ඞཁͳ͘ͳͬͨΒϝϞϦ͔Βফ͢
-JGFUJNF w 4XJGU6*ͷϏϡʔλΠϓܕ w ϏϡʔλΠϓͨͩͷϏϡʔඳըϨγϐ w ϏϡʔλΠϓͷΠϯελϯεࣗମඇৗʹ໋ w ͔͠͠Ϗϡʔͷੜଘظؒͬͱ͍ w
Ϗϡʔඞཁ͕͋ͬͨΒੜ͞Εɺඞཁͳ͘ͳͬͨΒফ͞ΕΔ w ੜ͞ΕͨΒonAppearɺফ͞ΕͨΒonDisappear͕ݺ ΕΔ w @State@StateObjectϏϡʔ͕ඞཁͳ͘ͳͬͨΒফ ͞ΕΔ
-JGFUJNF fl BHUSVF UBQ ࣌ؒ fl BHGBMTF struct Demo:
View { var flag: Bool var body: some View { if flag { Counter() .background(Color.blue) } else { Counter() .background(Color.red) } } } struct Counter: View { @State private var count = 0 var body: some View { Text("\(count)") .onTapGesture { count += 1 } } } fl BHUSVF ফ͞ΕΔ
-JGFUJNF fl BHUSVF UBQ ࣌ؒ fl BHGBMTF struct Demo:
View { var flag: Bool var body: some View { Counter() .background( flag ? Color.blue : Color.red ) } } struct Counter: View { @State private var count = 0 var body: some View { Text("\(count)") .onTapGesture { count += 1 } } } fl BHUSVF ফ͞Εͳ͍ Dependency
%FQFOEFODZ w %FQFOEFODZͨͩͷϏϡʔͷೖྗ w @State@StateObject͚ͩͰͳ͘ɺ @Bindingͨͩͷvarશͯ%FQFOEFODZ w bodyҎ֎શͯ%FQFOEFODZͱߟ͑ͯͳ͍ w %FQFOEFODZ͕มΘͬͨΒɺͦΕʹඥͮ͘Ϗϡʔ͕
࠶ඳը͞ΕΔ w CPEZ͕ݺΕ࣮ͯߦ͞ΕΔ
%FQFOEFODZ 7JFX 7JFX 7JFX 7JFX %FQFOEFODZ %FQFOEFODZ %FQFOEFODZ
·ͱΊ w *EFOUJUZΛ੍͢Δͷ4XJGU6*Λ੍͢Δ w -JGFUJNFΛҙ͠ͳ͍ͱඞཁͳঢ়ଶ͕ফ͑ͯ͠·͏ w %FQFOEFODZͰ࠷ඳը͢ΔϏϡʔΛநग़͍ͯ͠Δ
ࢀߟ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
More Decks by Elvis Shi
See All by Elvis Shi
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
600
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
590
ゼロから始めるPreferenceの実装 / Let's implement Preferences from scratch
lovee
0
170
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
410
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
810
How did I build an Open-Source SwiftUI Toast Library
lovee
1
190
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
1.3k
SwiftUIで二重スクロール作ってみた / When I tried to make a dual-scroll-ish view in SwiftUI
lovee
1
400
Observation のあれこれ / A brief introduction about Observation
lovee
3
460
Other Decks in Programming
See All in Programming
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
200
はじめてのPLATEAU
nokonoko1203
1
640
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
2k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
290
AWS CDKを理解するために公式の定義を深掘って解説してみる / Understanding AWS CDK by Digging into Its Official Definition
akihisaikeda
3
300
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.9k
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
15
11k
AI Augmentation Techniques with Liberty
ivargrimstad
1
460
protojson における文字化けの扱い
kazuki1023
0
400
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
130
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
390
Crafting Experiences
bethany
1
440
sira's awesome portfolio website redesign presentation
elsirapls
0
500
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
440
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.7k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
760
It's Worth the Effort
3n
188
29k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
300
Writing Fast Ruby
sferik
630
63k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
560
Paper Plane (Part 1)
katiecoart
PRO
3
12k