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
MVVMでProtocol Oriented をやってみた話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kumapo
November 29, 2016
Technology
1.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MVVMでProtocol Oriented をやってみた話
#potatotips 35 の発表資料です
kumapo
November 29, 2016
Other Decks in Technology
See All in Technology
Why Agent Cost Needs Observability
nttcom
0
170
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.4k
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
230
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
160
Kiro Meetup #8 Kiro アップデート (2026/3/21〜2026/9/24)
katzueno
1
240
PQC移行の今 -- IETF からみた現在地
satokan
3
360
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
870
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
4
1.3k
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
140
AI Agent入門〜今更聞けないAgentの話〜
hiromimaganuma
0
120
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
450
Amazon Bedrock Agents ClassicからAmazon Bedrock AgentCoreへ移行した際、ガードレール設定が2箇所に割れた話
matsunobu
0
110
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Large-scale JavaScript Application Architecture
addyosmani
515
110k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
490
エンジニアに許された特別な時間の終わり
watany
109
250k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
290
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
540
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
Transcript
MVVM Ͱ Protocol Oriented Λ ͬͯΈͨ ɹkumapo
ࣗݾհ • ຊۀ iOS ΤϯδχΞ • ͦͷΒͰαΠυϓϩδΣΫτΛ༑ਓͨͪͱ ͍ͬͯΔ
None
͖ΐ͏͢͜ͱ • αΠυϓϩδΣΫτͰॳΊͯMVVMΛ࠾༻ͯ͠Ҏདྷɺ ઃܭΛࢼߦࡨޡ͖ͯͨ͠ • ͖ΐ͏ ViewModelͰ Protocol Oriented ͬͯΈ
ͨΛ͠·͢ • Ξϓϩʔνͱͯ͠ ”Introduction to Protocol- Oriented MVVM by Natasha Murashev” ΛΞϨϯδ
MVVM Ͱࢼߦࡨޡͨ͠Օॴ • ViewModel Ͱͷ Data Formatting • σʔλʢModelͳͲʣ Λ
View͕ٻΊΔܗ ͱม͢ΔՕॴ • ViewModel ಉ࢜Ͱ ϩδοΫ͕ॏෳͯ͠͠· ͏
ྫ: TableViewController ͱ ViewController ͔ΒͳΔ 2ը໘
// ImageViewσʔλΛఏڙ͢ΔViewModel struct ShowStickerViewModel { var model: Sticker var imageURL:
URL? { return URL(string: model.imageURLString) } var placeholderImage: UIImage { return UIImage(named: “imgBlank”)! } Before: Data Formatting // TableViewCellͷImageViewσʔλΛఏڙ͢ΔViewModel struct StickerCellViewModel { var model: Sticker var imageURL: URL? { return URL(string: model.imageURLString) } var placeholderImage: UIImage { return UIImage(named: “imgBlank”)! }
// ImageViewఏڙ͢ΔσʔλΛఆΊͨϓϩτίϧ protocol ImageURLPresentable { var imageURL: URL? { get
} var placeholderImage: UIImage { get } } After: Data Formatting
// Protocol Extension ͯ͠ ImageURLPresentable ͷϓϩύςΟΛ࣮ // ܕ੍ͱͯ͠ Sticker Λࢦఆ
extension ViewModelType where Self: ImageURLPresentable, ModelType == Sticker { // σϑΥϧτͷ࣮: Sticker Λ Data Formatting ͢Δ var imageURL: URL? { return URL(string: model.imageURLString)ɹ } var placeholderImage: UIImage { return UIImage(named: “imgBlank”)! } After: Data Formatting // σʔλϑΥʔϚοτͷσϑΥϧτͷ࣮Λఏڙ͢Δϓϩτίϧ protocol ViewModelType { associatedtype ModelType // ϑΥʔϚοτରͷܕΛύϥϝʔλʔʹ var model: ModelType { get } }
struct ShowStickerViewModel: ViewModelType { typealias ModelType = Sticker var model:
ModelType } extension ShowStickerViewModel: ImageURLPresentable {} // ϓϩτίϧʹద߹ After: Data Formatting struct StickerCellViewModel: ViewModelType { typealias ModelType = Sticker var model: ModelType } extension StickerCellViewModel: ImageURLPresentable {} // ϓϩτίϧʹద߹ // ShowStickerViewController.swift imageView!.sd_setImage(with: viewModel.imageURL, placeholderImage: viewModel.placeholderImage)
·ͱΊ • ViewModel ͷ Data Formatting ͷ ϩδοΫΛ Protocol Extension
Λ༻͍ͯڞ௨Խͨ͠ • ViewModel ΛܕύϥϝʔλʔΛ࣋ͭϓϩτίϧʹద ߹ͤ͞Δ • Protocol Extension Λ༻͍ͯ Data Formattingͷσ ϑΥϧτ࣮Λఏڙ͢Δ • σϑΥϧτͷ࣮ରͷσʔλΛܕ੍ʹ͓ͯ͘͠
αϯϓϧίʔυ kumapo/ProtocolOrientedMVVM • ViewModel ϨΠϠʔͰͷData Formatting • ViewϨΠϠʔͰͷ Data Filling