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
Swift Optional Extension Tips
Search
horimislime
August 17, 2016
Technology
1
1.3k
Swift Optional Extension Tips
horimislime
August 17, 2016
Tweet
Share
More Decks by horimislime
See All by horimislime
How we build our app with minimum 3rd party dependencies
horimislime
0
64
サポート効率を上げるためのロギング環境構築
horimislime
7
3.6k
migrating-from-promise-to-reactive
horimislime
0
350
社内Swiftもくもく会成果発表
horimislime
0
110
ios-internationalization
horimislime
2
8.7k
UI testing in XCode7
horimislime
3
710
UIテストをカジュアルに自動化 / UI Automation using Remote
horimislime
2
2.2k
Swift Libraryざっくり現状確認 / Swift library overview
horimislime
1
120
1時間で作るSwiftアプリ / Swift Application in an hour
horimislime
2
110
Other Decks in Technology
See All in Technology
ゼロから始めるVue.jsコミュニティ貢献 / first-vuejs-community-contribution-link-and-motivation
lmi
1
120
Vertex AI を中心に 生成AIのアップデートを共有します
kaz1437
0
300
DevOpsDays History and my DevOps story
kawaguti
PRO
9
2.5k
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
2
180
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
290
一生覚えておきたい「システム開発=コミュニケーション」〜初めての実務案件振り返りLT〜
maimyyym
0
120
検証を通して見えてきたTiDBの性能特性
lycorptech_jp
PRO
6
3.7k
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
140
日本におけるデータエンジニアリングのこれまでとこれから
foursue
16
4.2k
リテール金融(キャッシュレス・ネット銀行・ネット証券)の競争環境と経済圏
8maki
0
620
開発パフォーマンスを最大化するための開発体制
ham0215
2
280
長期間TiDBを使ってきた話 @ 私たちはなぜNewSQLを使うのかTiDB選定5社が語る選定理由と活用LT / Experiences with TiDB Over Time
chibiegg
2
890
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
40
4.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
121
39k
Statistics for Hackers
jakevdp
789
220k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
187
16k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
Web Components: a chance to create the future
zenorocha
305
41k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
Building Flexible Design Systems
yeseniaperezcruz
319
37k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
A Tale of Four Properties
chriscoyier
151
22k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
Transcript
Optional Extension Tips Kyobashi.swift #2 @horimislime
About • ! @horimislime • " ҿ৯ళ͚iPadΞϓϦʮτϨλʯ • ❤ ιϑτΣΞઃܭͱ͔ӡ༻ͱ͔
OptionalͷຯͳπϥΈ
Objective-C if (users.count == 0) { // nil͔ۭͩͬͨΒԿ͔͢Δ } if
(name.length == 0) { // ໊લ͕nil͔ۭͩͬͨΒԿ͔͢Δ }
Swift // Compile error ! if users?.isEmpty { // ...
} if name?.isEmpty { // ... }
OptionalΛѻ͏ࡍͷ͓ଋ guard let users = users where !users.isEmpty else {
// nil͔ۭͩͬͨΒԿ͔͢Δ }
Nil Coalescing • ͘ॻ͚Δ͕ɺͺͬͱݟͷՄಡੑʹ͚ܽΔ if array?.isEmpty ?? false { //
... } if !(str ?? "").isEmpty { // ... }
θϩఆ • nilͷൺֱৗʹfalse • Objective-C→Swiftʹࣸܦ͢Δͱ௧͍ʹ // Objective-C if (str.count ==
0) { ... } /// Swift if str?.characters.count == 0 { ... }
• ܕ͕ݫີʹͳͬͨͷͷɺʮۭʯͷѻ͍͕໘ • nilͱۭͷঢ়ଶΛಉ͡Α͏ʹѻ͏ʹʁ
Optional Extension • isNilOrEmptyతͳͷ • Optional<String>ʹextensionੜͤͳ͍ // Error: 'Wrapped' constrained
to non-protocol type 'String' extension Optional where Wrapped: String { var isNilOrEmpty: Bool { return self?.isEmpty ?? true } }
Optional Extension • ಠࣗprotocolΛ༻ҙ͠ɺStringʹ४ڌͤ͞Δ protocol StringType { var isEmpty: Bool
{ get } } extension String: StringType {} extension Optional where Wrapped: StringType { var isNilOrEmpty: Bool { return self?.isEmpty ?? true } }
/// Before if name == nil || name.isEmpty else {
// nil͔ۭͩͬͨΒԿ͔͢Δ } /// After if name.isNilOrEmpty { ... }
·ͱΊ • nilͱۭҰॹͰߟ͑Δ߹͕ଟ͍ • ຯͳͱ͜ΖͰՄಡੑΛམͱ͞ͳ͍Ұ • Objective-C͔ΒSwiftҠߦظʹ͋Δͱศར͔
None