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
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
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
2
670
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
210
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
360
AI臭い文章とは何なのか
nasuvitz
38
77k
自主式軟體工廠
philipz
0
110
インバスケット試験対策アプリを 作って見えたAIエージェント構築 ナレッジ2選
shichijoyuhi
1
110
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
390
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
210
キャリアLT今日までそして明日から
kentapapa
1
140
BedrockとLambdaで作る リアルタイム進行型推理ゲーム
kawametho
0
160
20260929_AmazonGuardDutyの検出通知メールにAWS DevOpsAgentの調査結果を追加する
yhana
1
410
The kernel report
ennael
PRO
1
200
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
590
A Soul's Torment
seathinner
8
3.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Are puppies a ranking factor?
jonoalderson
2
4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How to Ace a Technical Interview
jacobian
280
24k
My Coaching Mixtape
mlcsv
0
330
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
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