Slide 1

Slide 1 text

Optional Extension Tips Kyobashi.swift #2 @horimislime

Slide 2

Slide 2 text

About • ! @horimislime • " ҿ৯ళ޲͚iPadΞϓϦʮτϨλʯ • ❤ ιϑτ΢ΣΞઃܭͱ͔ӡ༻ͱ͔

Slide 3

Slide 3 text

Optionalͷ஍ຯͳπϥΈ

Slide 4

Slide 4 text

Objective-C if (users.count == 0) { // nil͔ۭͩͬͨΒԿ͔͢Δ } if (name.length == 0) { // ໊લ͕nil͔ۭͩͬͨΒԿ͔͢Δ }

Slide 5

Slide 5 text

Swift // Compile error ! if users?.isEmpty { // ... } if name?.isEmpty { // ... }

Slide 6

Slide 6 text

OptionalΛѻ͏ࡍͷ͓໿ଋ guard let users = users where !users.isEmpty else { // nil͔ۭͩͬͨΒԿ͔͢Δ }

Slide 7

Slide 7 text

Nil Coalescing • ୹͘ॻ͚Δ͕ɺͺͬͱݟͷՄಡੑʹ͚ܽΔ if array?.isEmpty ?? false { // ... } if !(str ?? "").isEmpty { // ... }

Slide 8

Slide 8 text

θϩ൑ఆ • nilͷൺֱ͸ৗʹfalse • Objective-C→Swiftʹࣸܦ͢Δͱ௧͍໨ʹ // Objective-C if (str.count == 0) { ... } /// Swift if str?.characters.count == 0 { ... }

Slide 9

Slide 9 text

໰୊ • ܕ͕ݫີʹͳͬͨ΋ͷͷɺʮۭʯͷѻ͍͕໘౗ • nilͱۭͷঢ়ଶΛಉ͡Α͏ʹѻ͏ʹ͸ʁ

Slide 10

Slide 10 text

Optional Extension • isNilOrEmptyతͳ΋ͷ • ௚઀Optionalʹextension͸ੜ΍ͤͳ͍ // Error: 'Wrapped' constrained to non-protocol type 'String' extension Optional where Wrapped: String { var isNilOrEmpty: Bool { return self?.isEmpty ?? true } }

Slide 11

Slide 11 text

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 } }

Slide 12

Slide 12 text

/// Before if name == nil || name.isEmpty else { // nil͔ۭͩͬͨΒԿ͔͢Δ } /// After if name.isNilOrEmpty { ... }

Slide 13

Slide 13 text

·ͱΊ • nilͱۭ͸ҰॹͰߟ͑Δ৔߹͕ଟ͍ • ஍ຯͳͱ͜ΖͰՄಡੑΛམͱ͞ͳ͍Ұ޻෉ • Objective-C͔ΒSwiftҠߦظʹ͋Δͱศར͔΋

Slide 14

Slide 14 text

No content