Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Mockable UserDefaults with Duck typing
417.72KI
June 18, 2019
Programming
0
500
Mockable UserDefaults with Duck typing
417.72KI
June 18, 2019
Tweet
Share
More Decks by 417.72KI
See All by 417.72KI
CLIツールにSwift Concurrencyを適用させようとしている話
417_72ki
3
160
CI with Danger-Swift
417_72ki
1
90
Graduation from Playground beginner
417_72ki
3
760
Trap Questions in Java and Obj-C
417_72ki
1
170
ダックタイピングとidでUserDefaultsをモック化する
417_72ki
2
1.9k
Git Hooks
417_72ki
1
210
Management of Environment Variables with YAMLs Ver.2
417_72ki
2
770
Management of Environment Variables with YAMLs
417_72ki
1
500
iOS And GitLab-CI
417_72ki
1
2.5k
Other Decks in Programming
See All in Programming
Angular‘s Future without NgModules: Architectures with Standalone Components @enterJS
manfredsteyer
PRO
0
220
Seleniumでイキってたらサーバを絞め落としかけてた話
kenfujita
0
360
Node-RED 3.0 新機能紹介
utaani
0
140
Power Automateドリブンのチームマネジメント
hanaseleb
0
180
競プロのすすめ
uya116
0
660
Java初心者が知っておくべきプログラミングのこと - JJUG CCC 2022 Spring
kishida
5
540
Gitlab CIでMRを自動生成する
forcia_dev_pr
0
110
VisualProgramming_GoogleHome_LINE
nearmugi
1
220
Java アプリとAWS の良い関係 - AWS でJava アプリを実行する一番簡単な方法教えます / AWS for Javarista
kanamasa
2
1.2k
[DevTrends - Jun/2022] Arquitetura baseada em eventos
camilacampos
0
150
Beyond Micro Frontends: Frontend Moduliths for the Enterprise @wad2022
manfredsteyer
PRO
0
130
無限スクロールビューライブラリ 二つの設計思想比較
harumak
0
200
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
19
3k
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
Clear Off the Table
cherdarchuk
79
280k
The Illustrated Children's Guide to Kubernetes
chrisshort
15
36k
GraphQLとの向き合い方2022年版
quramy
16
8.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1M
GraphQLの誤解/rethinking-graphql
sonatard
28
6.6k
Git: the NoSQL Database
bkeepers
PRO
415
59k
Unsuck your backbone
ammeep
659
55k
Raft: Consensus for Rubyists
vanstee
126
5.4k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
213
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
181
15k
Transcript
.PDLBCMF6TFS%FGBVMUT XJUI %VDLUZQJOH QPUBUPUJQT
struct Me { let name = "Takuhiro Muta" let aka
= "417.72KI" let experienceYears = 5 let company = "iRidge inc." let twitter = "417_72ki" let qiita = "417_72ki" let gitHub = "417-72KI" let products = [ "BuildConfig.swift", "MockUserDefaults", ] } TFMGEFTDSJQUJPO
%VDL5ZQJOH
%VDL5ZQJOH w 0OFPGUIFNFUIPETUPJNQMFNFOU QPMZNPSQIJTN w 6TFEJOEZOBNJDMBOHVBHFT FH3VCZ 1ZUIPO w
0CKFDUTTVJUBCJMJUZJTEFUFSNJOFECZUIF QSFTFODFPGDFSUBJONFUIPETBOE QSPQFSUJFT w /PUPCKFDU`TPXOUZQF
r%BWF5IPNBT l*GJUXBMLTMJLFBEVDLBOERVBDLTMJLFB EVDL JUNVTUCFBEVDLz
%VDL5ZQJOH class Duck: def walk(self): print("Duck walking") def quack(self): print("Quack!!")
class Dog: def walk(self): print("Dog walking") def bark(self): print("Bark!!") def walk_and_quack(animal): animal.walk() animal.quack()
%VDL5ZQJOH class Duck: def walk(self): print("Duck walking") def quack(self): print("Quack!!")
class Dog: def walk(self): print("Dog walking") def bark(self): print("Bark!!") def walk_and_quack(animal): animal.walk() animal.quack()
%VDL5ZQJOH class Duck: def walk(self): print("Duck walking") def quack(self): print("Quack!!")
class Dog: def walk(self): print("Dog walking") def bark(self): print("Bark!!") def walk_and_quack(animal): animal.walk() animal.quack()
%VDL5ZQJOH class Duck: def walk(self): print("Duck walking") def quack(self): print("Quack!!")
class Dog: def walk(self): print("Dog walking") def bark(self): print("Bark!!") def walk_and_quack(animal): animal.walk() animal.quack()
%VDL5ZQJOH walk_and_quack(Duck()) # Duck walking # Quack!! walk_and_quack(Dog()) # Dog
walking # AttributeError: 'Dog' object has # no attribute 'quack'
*O0CK$ @interface Duck: NSObject - (void)walk; - (void)quack; @end @implementation
Duck - (void)walk { NSLog(@"Duck walking"); } - (void)quack { NSLog(@"Quack!!"); } @end void walkAndQuack(id animal) { [animal walk]; [animal quack]; }
*O0CK$ @interface Duck: NSObject - (void)walk; - (void)quack; @end @implementation
Duck - (void)walk { NSLog(@"Duck walking"); } - (void)quack { NSLog(@"Quack!!"); } @end void walkAndQuack(id animal) { [animal walk]; [animal quack]; }
*O0CK$ @interface Duck: NSObject - (void)walk; - (void)quack; @end @implementation
Duck - (void)walk { NSLog(@"Duck walking"); } - (void)quack { NSLog(@"Quack!!"); } @end void walkAndQuack(id animal) { [animal walk]; [animal quack]; }
*O0CK$ walkAndQuack([Duck new]); // Duck walking // Quack!! walkAndQuack([Dog new]);
// Dog walking // unrecognized selector sent to instance
)PXUPNPDL 6TFS%FGBVMUT
r%BWF5IPNBT l*GJUXBMLTMJLFBEVDLBOERVBDLTMJLFB EVDL JUNVTUCFBEVDLz
l*GJUTBWFTPCKFDUTMJLF6TFS%FGBVMT BOEMPBETPCKFDUTMJLF6TFS%FGBVMUT JUNVTUCF6TFS%FGBVMUTz
%FpOFBMMNFUIPETJO /46TFS%FGBVMUT
%FpOFBMMNFUIPETJO /46TFS%FGBVMUT /PUFYUFOE/46TFS%FGBVMUT
*NQMFNFOU
%FpOFFYUFOTJPOUPVTFJU BT/46TFS%FGBVMUT
%FpOFFYUFOTJPOUPVTFJU BT/46TFS%FGBVMUT
%FpOFFYUFOTJPOUPVTFJU BT/46TFS%FGBVMUT ⁉
None
5IBOLZPV IUUQTHJUIVCDPN,*.PDL6TFS%FGBVMUT