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
既存アプリへのSwiftUI導入事例
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takashico
July 05, 2021
Programming
790
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
既存アプリへのSwiftUI導入事例
Takashico
July 05, 2021
More Decks by Takashico
See All by Takashico
Translation APIをUIKitでも使ってみたい
takashico
1
550
Other Decks in Programming
See All in Programming
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
AmebaブログはKMPから卒業します
kmars0605
0
200
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
660
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
780
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
The Rails Doctrine Decade
koic
2
590
JIS keyboard support in Omarchy
lef237
0
130
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
2
720
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Site-Speed That Sticks
csswizardry
13
1.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
570
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
940
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Transcript
طଘΞϓϦͷSwiftUIಋೖࣄྫ 2021/6/30 Shiko Takahashi
2 ࣗݾհ • Shiko Takahashi • iOSΞϓϦΤϯδχΞ • Android͡Ί·ͨ͠ʂ •
ٳΈͷɺೣͱ༡Ϳ ɻ @takashico @takashico smtakahashi
3 ຊ͓͢͠Δ͜ͱ
4 ຊ͓͢͠Δ͜ͱ • SwiftUIͱ • ಋೖͷ͖͔͚ͬ • ಋೖલͷݕ౼ʹ͍ͭͯ • ·ͱΊ
5 SwiftUIͱ
6 SwiftUIͱ • ৽͍͠UIϑϨʔϜϫʔΫʢWWDC19ʣ ◦ গͳ͍ίʔυͰUIߏங͕Մೳ ◦ એݴܕγϯλοΫεʢγϯϓϧʣ ◦ ϓϨϏϡʔػೳʢσόοάޮUPʣ
◦ etc… • αϙʔτΛiOS13.0Ҏ্ʹ͢Δඞཁ͕͋Δ SwiftUI ΑΓ༏ΕͨAppΛɺΑΓগͳ͍ίʔυͰɻ ࢀর: https://developer.apple.com/jp/xcode/swiftui
7 SwiftUIͱ • ৽͍͠UIϑϨʔϜϫʔΫʢWWDC19ʣ ◦ গͳ͍ίʔυͰUIߏங͕Մೳ ◦ એݴܕγϯλοΫεʢγϯϓϧʣ ◦ ϓϨϏϡʔػೳʢσόοάޮUPʣ
◦ etc… • αϙʔτΛiOS13.0Ҏ্ʹ͢Δඞཁ͕͋Δ SwiftUI ΑΓ༏ΕͨAppΛɺΑΓগͳ͍ίʔυͰɻ ࢀর: https://developer.apple.com/jp/xcode/swiftui ͜ͷ੍ʹΑͬͯಋೖ͕͔ͬͨ͠
8 SwiftUIͱ • ৽͍͠UIϑϨʔϜϫʔΫʢWWDC19ʣ ◦ গͳ͍ίʔυͰUIߏங͕Մೳ ◦ એݴܕγϯλοΫεʢγϯϓϧʣ ◦ ϓϨϏϡʔػೳʢσόοάޮUPʣ
◦ etc… • αϙʔτΛiOS13.0Ҏ্ʹ͢Δඞཁ͕͋Δ SwiftUI ΑΓ༏ΕͨAppΛɺΑΓগͳ͍ίʔυͰɻ ࢀর: https://developer.apple.com/jp/xcode/swiftui ͜ͷ੍ʹΑͬͯಋೖ͕͔ͬͨ͠ εϖʔεϚʔέοτΞϓϦʹ ͍͔ͭಋೖ͍ͨ͠ͳͱߟ͍͑ͯ·ͨ͠🤔 ʢಋೖલ·ͰiOS11.4·Ͱαϙʔτͯ͠ ͍·ͨ͠ʣ
9 ಋೖͷ͖͔͚ͬ
10 ಋೖͷ͖͔͚ͬ ϗʔϜը໘ͷUIϦχϡʔΞϧΛߦ͏͜ͱʹɻ
11 ಋೖͷ͖͔͚ͬ ৽͍͠ϗʔϜը໘
12 ಋೖͷ͖͔͚ͬ ৽͍͠ϗʔϜը໘ ͔̍Β࡞Γ͢ඞཁ͕͋ΔͷͰɺ ͜ͷػձʹSwiftUIͰͬͯΈ͍ͨ😃 ͍͟ݕ౼ͯ͠ΈΑ͏ʂ
13 ಋೖલͷݕ౼
14 SwiftUIಋೖલͷݕ౼ 1. αϙʔτΛiOS13.0Ҏ্ʹͰ͖Δ͔ʁ 2. SwiftUIͰߏஙՄೳͳը໘ͳͷ͔ʁ 3. ϝϦοτ͕͋Δ͔ʁ
15 1. αϙʔτΛiOS13.0Ҏ্ʹ͢Δ͜ͱ͕Ͱ͖Δ͔ʁ
16 αϙʔτΛiOS13.0Ҏ্ʹͰ͖Δ͔ʁ • શମʢ৽نϢʔβʔʣ ◦ iOSόʔδϣϯผͷར༻ঢ়گΛ֬ೝ ◦ iOSͷΞοϓσʔτ༧ఆ • εϖʔεϚʔέοτʢطଘϢʔβʔʣ
◦ iOSόʔδϣϯผͷར༻ঢ়گΛ֬ೝ ͦΕͧΕiOS13.0Ҏ্ʹ͋͛ͯͳ͍ͷ͔Λ֬ೝ͍͖ͯ͠·͢
17 શମతͳiOSόʔδϣϯ༻ͱঢ়گ
18 աڈ4ؒʹಋೖ͞ΕͨσόΠεͷiOSόʔδϣϯ༻ 90% 8% 2% ࢀর: https://developer.apple.com/jp/support/app-store ※ 20216݄3࣌
19 աڈ4ؒʹಋೖ͞ΕͨσόΠεͷiOSόʔδϣϯ༻ 90% 8% 2% ࢀর: https://developer.apple.com/jp/support/app-store ※ 20216݄3࣌ 98%ͷσόΠεͰ
iOS13Ҏ্͕ਁಁ ͍ͯ͠Δ
20 ࠓळࠒʹiOS15͕ϦϦʔε༧ఆ ࢀর: https://www.apple.com/apple-events/june-2021
21 ࠓळࠒʹiOS15͕ϦϦʔε༧ఆ ࢀর: https://www.apple.com/apple-events/june-2021 ϦϦʔεޙɺ iOS13ະຬͷ༻ ͕ݮগ͍ͯ͘͠ ͜ͱ͕ݟࠐΊΔ
22 શମతͳiOSόʔδϣϯผ༻ͱঢ়گ iOS13Ҏ্98%ਁಁ͍ͯ͠Δ + ࠓळʹiOS15͕ϦϦʔε༧ఆ SwiftUIΛಋೖͰ͖Δڥ͕͖͍ͬͯͯΔ
23 εϖʔεϚʔέοτΞϓϦͷ iOSόʔδϣϯผར༻ঢ়گΛ֬ೝ
24 εϖʔεϚʔέοτΞϓϦͷiOSผར༻ঢ়گͷ֬ೝ ڐ༰ൣғͰ͋Δ͜ͱΛ֬ೝ App Store ConnectͰiOSόʔδϣϯผͷར༻ঢ়گΛ֬ೝͰ͖·͢ iOS12ҎԼͷར༻ શମͷ0.3%΄ ͲͰͨ͠ɻ
25 αϙʔτΛiOS13.0Ҏ্ʹͰ͖Δ͔ʁ • શମ ◦ 98%ͷσόΠεͰiOS13Ҏ্Λ༻͍ͯ͠Δʢաڈ4ؒͷσόΠεʣ ◦ ࠓळʹiOS15͕ϦϦʔε༧ఆ • εϖʔεϚʔέοτ
◦ iOS12ҎԼͷαϙʔτΛΔ͜ͱ͕Ͱ͖Δ iOS13.0ʹ͢Δ͜ͱ͕Մೳ
26 2. SwiftUIͰߏஙՄೳͳը໘ͳͷ͔ʁ ʢཁ݅Λຬͨ͢͜ͱ͕Ͱ͖Δ͔ʣ
27 SwiftUIͰߏஙՄೳͳը໘ͳͷ͔ʁ • σβΠϯ௨Γͷը໘Λ࡞Ͱ͖Δͷ͔ʁ ◦ ຊ࣮͢Δલʹ͋Δఔ༻͢ΔAPIͳͲΛ֬ೝ • ϗʔϜը໘ͷ࣮ͷͨΊɺͳΔ͘ϦεΫΛආ͚࣮͕ͨͰ͖Δ͔ʁ ◦ Λ͚࣮͕ͨͰ͖Δ͔֬ೝ
◦ iOS13ಛ༗ͷΛճආ
28 σβΠϯ௨Γͷը໘Λ࡞Ͱ͖Δͷ͔ʁ
29 σβΠϯ௨Γͷը໘Λ࡞Ͱ͖Δͷ͔ʁ • Ϧετදࣔʢ֊ʣ • CellͷλοϓʹΑͬͯల։ঢ়ଶΛ੍ޚͰ͖Δ ྫ͑ɺҎԼͷը໘͕࡞Ͱ͖Δͷ͔Λ֬ೝͯ͠ΈΔ
30 σβΠϯ௨Γͷը໘Λ࡞Ͱ͖Δͷ͔ʁ • ListʢchildrenʣΛ༻͢Δํ๏ • DisclosureGroupΛ༻͢Δํ๏ ͜ΕΒͷ࣮ํ๏Ͱ࣮ݱͰ͖Δ͜ͱΛ֬ೝ // isExpanded: ల։ϑϥά
DisclosureGroup( isExpanded: $isExpanded, content: { // ࢠΧςΰϦCell }, label: { // ΧςΰϦCell } ) // categories: ΧςΰϦʔͷྻ List(categories, children: \.children) { item in // ࢠΧςΰϦCell }
31 σβΠϯ௨Γͷը໘Λ࡞Ͱ͖Δͷ͔ʁ • ListʢchildrenʣΛ༻͢Δํ๏ • DissclosureGroupΛ༻͢Δํ๏ ͜ΕΒͷ࣮ํ๏Ͱ࣮ݱͰ͖Δ͜ͱΛ֬ೝ // isExpanded: ల։ϑϥά
DisclosureGroup( isExpanded: $isExpanded, content: { // ࢠΧςΰϦCell }, label: { // ΧςΰϦCell } ) // categories: ΧςΰϦʔͷྻ List(categories, children: \.children) { item in // ࢠΧςΰϦCell } ଞͷը໘࣮ݱՄೳͰ͋Δ͜ͱΛ֬ೝ͠ ·ͨ͠ɻ ※ ຊ࣮ͯ͠Έͳ͍ͱΘ͔Βͳ͍ଟ͍ͷ Ͱɺ͋͘·ͰβοΫϦͱ֬ೝ͠·ͨ͠ɻ
32 ϦεΫΛආ͚࣮͕ͨͰ͖Δ͔ʁ ʢΛ͚࣮ͨʣ
33 UIKitͱซ༻࣮ͨ͠
34 UIKitͱซ༻࣮ͨ͠ • SwiftUIͰ࡞ͨ͠ը໘ΛViewͱͯ͠ѻ͏͜ ͱͰॊೈʹରԠ ◦ ͕͠ൃੜͨ͠߹ʹɺ෦త ʹ༻͢Δ͜ͱͳͲॊೈʹରԠՄೳ • ίϯτϩʔϥʔ෦ͷෆ۩߹க໋తͳӨڹΛ
༩͑ΔڪΕ͕͋ΔͨΊɺViewControllerʹ Λ࣋ͨͤΔߏͰ࣮ • UIHostingControllerΛͬͯUIKitଆ͔Β SwiftUIͰ࡞ͨ͠ΦϒδΣΫτΛੜͰ͖Δ
35 SwiftUIΛΈࠐΉίʔυ // HomeContainerView: SwiftUIͰ࡞ͨ͠ը໘ let homeContainerVC = UIHostingController(rootView: HomeContainerView())
guard let homeContainerView = homeContainerVC.view else { return } self.addChild(homeContainerVC) homeContainerVC.didMove(toParent: self) self.view.addSubview(homeContainerView) // Auto Layout੍Λઃఆ homeContainerView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ homeContainerView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 0.0), homeContainerView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: 0.0), homeContainerView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0.0), homeContainerView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0.0) ])
36 UIKitͱซ༻࣮ͨ͠ SwiftUIͰ࡞ͨ͠ViewΛѻ͍͘͢͢ΔͨΊʹ • delegate ◦ ΞΫγϣϯͷॲཧ • dataSource ◦
σʔλͷߋ৽
37 Delegate λοϓΞΫγϣϯ
38 Delegate /// DelegateΛఆٛ protocol BannerViewDelegate: AnyObject { func didSelectBanner(uid:
String) } /// BannerViewDelegateͷॲཧ extension HomeViewController: BannerViewDelegate { func didSelectBanner(uid: String) { // ը໘ભҠͷॲཧ } } HomeViewController.swift struct BannerView: View { weak var delegate: BannerViewDelegate? var body: some View { // όφʔը૾ʹରͯ͠onTapGestureΛઃఆ Image(”όφʔը૾”) .onTapGesture { self.delegate?.didSelectBanner(uid: "όφʔUid") } } } BannerView.swift
39 DataSource /// ObservableObjectϓϩτϩϧΛܧঝͨ͠ΫϥεͰఆٛ͢Δ class DataSource: ObservableObject { @Published var
banners: [Banner] = [] } // Λߋ৽͢Δ BannerView.DataSorce.banners = ["όφʔใ"] σʔλΛऔಘ dataSourceʢObservedObjectʣ ͷΛࢹ͍ͯ͠ΔͨΊɺ ʢbannersʣ͕ߋ৽͞Εͨ߹ Viewͷ࠶ඳը͕ߦΘΕΔ ᶃ ᶄ ᶅ dataSourceʢObservedObjectʣ ʹऔಘͨ͠σʔλΛ͢
40 • SwiftUIͰ࡞ͨ͠ը໘ΛViewͱͯ͠ѻ͏͜ ͱͰϦεΫϔοδʢॊೈʹରԠͰ͖Δʣ • delegate, dataSourceͳͲఆٛͯ͠ѻ͍͢ ࣮͘ UIKitͱซ༻࣮ͨ͠
41 ϦεΫΛආ͚࣮͕ͨͰ͖Δ͔ʁ ʢiOS13ಛ༗ͷΛճආʣ
42 iOS13ಛ༗ͷΛճආ • ಈ࡞͕ෆ҆ఆͱ͍͏ใࠂ͕͋Δ ◦ SwiftUI NavigationView broken in iOS
13.3 ◦ ϚΠφʔόʔδϣϯʹΑͬͯڍಈ͕มΘΔ • iOS13Ͱ༻Ͱ͖ΔAPI͕ݶΒΕ͍ͯΔ ◦ ༻Ͱ͖ΔAPIͷΈͰ࣮͠Α͏ͱ͢ΔͱɺύϑΥʔϚϯεΛམͱ͢ڪΕ͕͋Δ ʢLazyܥͳͲ͕༻Ͱ͖ͳ͍ͨΊʣ ◦ ࣮ʹ͕ඞཁʢUIKitΛϥοϓͯ͠༻͢ΔͳͲʣ ɹɹɹ˞ UIKitͱൺͯSwiftUIػೳ͕ෆ͍ͯ͠Δ
43 iOS13 iOS14+ iOSόʔδϣϯʹΑͬͯग़͚͍ͯ͠Δ
44 SwiftUIͰߏஙՄೳͳը໘ͳͷ͔ʁ • σβΠϯ௨Γͷը໘Λ࡞Ͱ͖Δͷ͔ʁ ◦ ͋Δఔ࣮ΠϝʔδͰ͖ͨ • ϗʔϜը໘ͷ࣮ͷͨΊɺͳΔ͘ϦεΫΛආ͚࣮͕ͨͰ͖Δ͔ʁ ◦ SwiftUI͋͘·ͰViewͱͯ͠׆༻͢Δ
◦ iOS14Ҏ্Ͱ৽͍͠ϗʔϜը໘Λදࣔ͢Δ ཁ݅Λຬ࣮͕ͨͨ͠Մೳ
45 3. ϝϦοτ͕͋Δ͔ʁ
46 ϝϦοτ͕͋Δͷ͔ʁ • কདྷతʹΩϟονΞοϓ͕ඞཁͳٕज़ͷݕূɾ࣮ྫ͕Ͱ͖Δ • UIߏஙͷ։ൃޮ্͕͢ΔݟࠐΈ͕͋Δ ◦ ຊ࣮͢Δલʹײ৮Λ֬ೝ
47 • એݴܕγϯλοΫεͰײతͳίʔσΟϯά͕Ͱ͖Δ ◦ σβΠφʔͳͲͱׂ୲ͳͲՄೳ • ϏϧυճΛݮΒ͢͜ͱͰɾετϨεݮ ͜Ε·Ͱͷ σόοάखॱ ։ൃޮ্͕͢ΔݟࠐΈ͕͋Δ
UIߏங Ϗϧυ ֬ೝ͍ͨ͠ ը໘ભҠ ֬ೝ UIߏங Ϗϧυ ֬ೝ ϓϨϏϡʔͷ σόοάखॱ ͜ͷ෦ʹ࣌ؒΛཁ͍ͯͨ͠
48 ϝϦοτ͕͋Δͷ͔ʁ • কདྷతʹΩϟονΞοϓ͕ඞཁͳٕज़ͷݕূɾ࣮ྫ͕Ͱ͖Δ • UIߏஙͷ։ൃޮ্͕͢ΔݟࠐΈ͕͋Δ ◦ ײతͰ࣮͍͢͠ ◦ σβΠφʔͱׂ୲͘͢͠ͳΔ
◦ σόοάָ͕ ಋೖΛਪͤΔϝϦοτ͕͋Δ
49 Ҏ্ɺݕ౼ͷ݁Ռ
50 SwiftUIಋೖલͷݕ౼݁Ռ 1. αϙʔτΛiOS13.0Ҏ্ʹͰ͖Δ͔ʁ ◦ શମతɾεϖʔεϚʔέοτΞϓϦͷར༻ঢ়گΛؑΈͯɺ iOS13.0ʹ͋͛Δ͜ͱ͕Մೳ 2. SwiftUIͰߏஙՄೳͳը໘ͳͷ͔ʁ
◦ ༻͢ΔAPIͳͲ֬ೝΛߦ͍ɺ࣮ͷఆ͕Ͱ͖ͨ ◦ UIKitͱซ༻࣮ͨ͠Λߦ͏͜ͱͰɺͰ͖Δ͚ͩϦεΫΛԼ࣮͕͛ͨͰ͖Δ ◦ ৽͍͠ϗʔϜը໘iOS14Ҏ্ͰରԠ͢ΔΑ͏ʹ͢Δ 3. ϝϦοτ͕͋Δ͔ʁ ◦ UIߏஙͷ࡞ۀޮ্͕ݟࠐΊΔ ◦ σβΠφʔͱͷ࡞ۀ୲Ͱ͖ͦ͏ ◦ কདྷతʹΩϟονΞοϓ͕ඞཁͳٕज़ͷݕূɾ࣮༻ྫ͕Ͱ͖Δ OK OK OK
51 SwiftUIಋೖલͷݕ౼݁Ռ 1. αϙʔτΛiOS13.0Ҏ্ʹͰ͖Δ͔ʁ ◦ શମతɾεϖʔεϚʔέοτΞϓϦͷར༻ঢ়گΛؑΈͯɺ iOS13.0ʹ͋͛Δ͜ͱ͕Մೳ 2. SwiftUIͰߏஙՄೳͳը໘ͳͷ͔ʁ
◦ ༻͢ΔAPIͳͲ֬ೝΛߦ͍ɺ࣮ͷఆ͕Ͱ͖ͨ ◦ UIKitͱซ༻࣮ͨ͠Λߦ͏͜ͱͰɺͰ͖Δ͚ͩϦεΫΛԼ࣮͕͛ͨͰ͖Δ ◦ ৽͍͠ϗʔϜը໘iOS14Ҏ্ͰରԠ͢ΔΑ͏ʹ͢Δ 3. ϝϦοτ͕͋Δ͔ʁ ◦ UIߏஙͷ࡞ۀޮ্͕ݟࠐΊΔ ◦ σβΠφʔͱͷ࡞ۀ୲Ͱ͖ͦ͏ ◦ কདྷతʹΩϟονΞοϓ͕ඞཁͳٕज़ͷݕূɾ࣮༻ྫ͕Ͱ͖Δ OK OK OK SwiftUIಋೖࢸΓɺ ແࣄෆ۩߹ͳ࣮͘Λߦ͏͜ͱ͕ Ͱ͖·ͨ͠🙌
52 ·ͱΊ
53 ·ͱΊ • SwiftUIͷಋೖʹ͍ͭͯ ◦ ϝϦοτ ▪ UIKitͱΈ߹ΘͤͯॊೈʹରԠͰ͖Δ ▪ UIߏஙʹؔͯ͠࡞ۀޮUP͕ݟࠐΊΔ
▪ কདྷతʹΩϟονΞοϓ͕ඞཁͳٕज़ͷݕূɾ࣮ྫ͕Ͱ͖Δ ◦ σϝϦοτ ▪ UIKitͱൺͯΓͳ͍ػೳ͕ଟʑ͋Δ ▪ iOS13Ͱͷ࣮͕ඞཁ ʢiOS14αϙʔτޙʹಋೖͨ͠ํ͕҆ఆ͢Δͱࢥ͍·͢ʣ
54 ·ͱΊ • ͜Ε͔Β ◦ αϙʔτόʔδϣϯͷϝϯςφϯεΛܧଓతʹߦ͏͜ͱ͕େࣄ ▪ SwiftUI༻͢Δɾ͠ͳ͍ʹؔΘΒͣɺศརͳAPI͕༻Ͱ͖Δ ◦ WWDC21Ͱ৽ͨʹ༻Ͱ͖ΔAPI͕ެ։͞Εɺࠓޙ͍উख͕ྑ͘ͳΔ
▪ ࠷৽ٕज़ͷΩϟονΞοϓͯ͠ɺΑΓྑ͍ϓϩμΫτΞοϓσʔτʂ • ΑΓৄ͍͠༰ͪ͜Β ◦ SwiftUIͰ࣮ͨ͠৽͍͠ϗʔϜը໘ΛϦϦʔε͠·ͨ͠ ◦ SwiftUIͰΧϧʔηϧΛ࣮͢Δ
None