Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Design patterns in Swift Vol. 0
Search
Johnlin
December 13, 2016
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Design patterns in Swift Vol. 0
Johnlin
December 13, 2016
More Decks by Johnlin
See All by Johnlin
用 MLIR 實作 一個 Ruby IR (intermediate representation)
johnlinvc
0
330
Unearth Ruby builtin Gems 發掘 Ruby 的內建 Gems
johnlinvc
0
420
Ruby 型別檢查工具簡介
johnlinvc
0
630
Swift Actor 實作探索
johnlinvc
0
210
用 mruby 來寫跨平台工具
johnlinvc
0
130
Actor model 簡介
johnlinvc
0
240
一起玩 Helm 3
johnlinvc
1
170
為什麼 App 卡卡的
johnlinvc
2
1.3k
如何使用 byebug 來除錯 Ruby 程式
johnlinvc
0
280
Other Decks in Programming
See All in Programming
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
440
What We Talk About When We Talk About XP
m_seki
2
390
フロントエンドUIフレームワークのこれまでとこれから
ssssota
1
760
Foundry Localでエージェント開発
seosoft
0
150
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
Webの地図
yosuke_furukawa
PRO
1
550
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
270
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
150
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
160
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
180
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Paper Plane
katiecoart
PRO
2
53k
For a Future-Friendly Web
brad_frost
183
10k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
490
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Become a Pro
speakerdeck
PRO
31
6.2k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Code Reviewing Like a Champion
maltzj
528
40k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
Design Patterns in Swift John Lin Vol 0
ॄኄੋDesign patterns? • Design patterns = ઃܭࣜɻ • ֤छೈᱪதৗݟతՍߏɼ㢨ଞ၇औҰݸ໊ࣈɻṜᒬࢠ ࠽ํศ౼ɻ
• औៃࣗݐஙላత໊ࣈɻ
࠷ஶ໊తઃܭࣜ၇ • Design Patterns: Elements of Reusable Object-Oriented Software
BY Erich Gamma , Richard Helm , Ralph Johnson , John Vlissides ؆ GoF(gang of four) ࢛ਓ㢨ɻ • ཫ໘ሜྃ23 छৗݟతC++݅ಋ ࣜɻ
ઃܭࣜత • Ṝຊॻੋඳड़C++ Smalltalk தৗݟతղܾ తํ๏ɻ • ୠੋሣଖଞޠݴိ㘸ɼṜࠣղܾํ๏҃ڐ༗ߋతղ ܾํ๏ɻ
Singleton • ݸఔࣜཫೳ༗Ұݸመᱪ(instance)ɻ • ৗ༻ိᙛ࡞ࢿݯཧऀ(manager)ɻ • መ࡞࣌धཁߟྀଟࣥߦॹ࣌త㐫گɻ
@interface Singleton : NSObject @end @implementation Singleton + (instancetype)sharedInstance {
static Singleton *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[Singleton alloc] init]; }); return sharedInstance; } @end
error: 'dispatch_once_t' is unavailable in Swift: Use lazily initialized globals
instead static var onceToken: dispatch_once_t = 0 ^~~~~~~~~~~~~~~
class Singleton { static let sharedInstance = Singleton() }
Iterator • భث • ༻ိଘऔҰݸ༰ث㚎తݩૉ • ෆधཁ༻ index
for i in 1...10 { print(i) } for c in
"hello world".characters { print(c) }
Swift తభث Protocol IteratorProtocol • ੋҰݸ Protocol • ༗ҰݸඞཁతവᏐ next()
• ᙛ༗ԼҰݸݩૉ࣌ɼճၚಹݸݩૉ • ᔒ༗ԼҰݸݩૉత࣌ީɼճၚ nil
Swift తجૅభث AnyIterator • ੋҰݸ Struct • আྃభ೭֎ؐ༗ଖଞతޭೳɻ
var s = "" let iter = AnyIterator<String> { let
c = s.characters.count % 2 == 0 ? "5" : "6" s = s + c return s.characters.count > 10 ? nil : s } for c in iter { print(c) } /* 5 56 … 565656565 5656565656 */
var s = "" let iter = AnyIterator<String> { let
c = s.characters.count % 2 == 0 ? "5" : "6" s = s + c return s.characters.count > 10 ? nil : s } for c in iter.filter({ $0.characters.count % 2 == 0 }) { print(c) } /* 56 5656 565656 56565656 5656565656 */
var s = "" let iter = AnyIterator<String> { let
c = s.characters.count % 2 == 0 ? "5" : "6" s = s + c return s.characters.count > 10 ? nil : s } for (idx,c) in iter.enumerated() { print("\(idx):\(c)") } /* 0:5 1:56 2:565 … 8:565656565 9:5656565656 */
ᩋ㟬తClass ೳඃభ • ঝ IteratorProtocol Sequence • typealias Element
= <ཁճၚతType> • ఆٛ next()
class PPAP : Sequence, IteratorProtocol { typealias Element = String
let stuffs = [ "APPLEPEN", "PINEAPPLEPEN", "PENPINEAPPLEAPPLEPEN"] var idx = 0 func next()-> String? { defer {idx += 1} guard idx < stuffs.count else { return nil } return stuffs[idx] } } let ppap = PPAP() for p in ppap { print(p) }
class PPAP : Sequence, IteratorProtocol { typealias Element = String
let stuffs = [ "APPLEPEN", "PINEAPPLEPEN", "PENPINEAPPLEAPPLEPEN"] var idx = 0 func next()-> String? { defer {idx += 1} guard idx < stuffs.count else { return nil } return stuffs[idx] } } let ppap = PPAP() for p in ppap { print(p) } /* APPLEPEN PINEAPPLEPEN PENPINEAPPLEAPPLEPEN */
let ppap = PPAP() for p in ppap { print(p)
}
Q&A