Slide 1

Slide 1 text

iOS ࣾ಺ษڧձ 2017/9/8 ezura

Slide 2

Slide 2 text

ۙگ • ఩ֶΛֶͼ࢝Ίͨ

Slide 3

Slide 3 text

ۙگ • ఩ֶΛֶͼ࢝Ίͨ ΪϦγϟ఩ֶ

Slide 4

Slide 4 text

ۙگ • ఩ֶΛֶͼ࢝Ίͨ ΪϦγϟ఩ֶ Θ͔Μͳ͍ʼʻ
 ผ్Ͱ఩ֶ΋ֶ΅͏…

Slide 5

Slide 5 text

զʑ͕ݟ͍ͯΔੈքͷ ਅ࣮͸Կͳͷ͔

Slide 6

Slide 6 text

“ਅ”ͱ͸ “ળ”ͱ͸ “ඒ”ͱ͸

Slide 7

Slide 7 text

ͦΕΒͷຊ࣭͸Կͳͷ͔ զʑ͸Կͳͷ͔

Slide 8

Slide 8 text

ੈքΛߏ੒͢Δ΋ͷ͸ ҰମͳΜͳͷ͔

Slide 9

Slide 9 text

ੈքΛߏ੒͢Δ΋ͷ͸ ҰମͳΜͳͷ͔

Slide 10

Slide 10 text

ੈքΛߏ੒͢Δ΋ͷ͸ ҰମͳΜͳͷ͔ ΦϒδΣΫτࢦ޲ͷੈքͰͷදݱɺ
 ΦϒδΣΫτͷଊ͑ํ
 class, interface, method, …

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

ϓϥτϯ ΞϦετςϨε ιΫϥςε

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ϓϥτϯͷઆ • ӬԕͰීวͳΔଘࡏɺਅͷଘࡏ
 ΠσΞ • ΠσΞքͱײ֮ੈք͕͋Δ

Slide 15

Slide 15 text

ϓϥτϯͷઆ

Slide 16

Slide 16 text

ϓϥτϯͷઆ • അͩ

Slide 17

Slide 17 text

ϓϥτϯͷઆ • അͩ

Slide 18

Slide 18 text

ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔

Slide 19

Slide 19 text

ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔ • େ͖͞΍৭ͳͲɺ׬શʹಉ͡Ͱ͸ͳ ͍ͷʹɺͳͥഅͩͱ൑அͰ͖Δͷ͔

Slide 20

Slide 20 text

ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔ • େ͖͞΍৭ͳͲɺ׬શʹಉ͡Ͱ͸ͳ ͍ͷʹɺͳͥഅͩͱ൑அͰ͖Δͷ͔ • അͨΒ͠ΊΔ΋ͷ͸Կ͔

Slide 21

Slide 21 text

ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔ • େ͖͞΍৭ͳͲɺ׬શʹಉ͡Ͱ͸ͳ ͍ͷʹɺͳͥഅͩͱ൑அͰ͖Δͷ͔ • അͨΒ͠ΊΔ΋ͷ͸Կ͔ • ͳͥഅ͸ෳ਺ଘࡏͰ͖Δͷ͔

Slide 22

Slide 22 text

ΠσΞք ײ֮ੈք

Slide 23

Slide 23 text

ΠσΞք ײ֮ੈք

Slide 24

Slide 24 text

ΠσΞք ײ֮ੈք class അ { property method }ɹ instance instance instance

Slide 25

Slide 25 text

ΠσΞք ײ֮ੈք class അ { property method }ɹ instance instance instance ීวͰӬԕͳ΋ͷ มԽ͠
 ੜ੒ɾফ໓͢Δ΋ͷ

Slide 26

Slide 26 text

ϓϥτϯͷઆ • ӬԕͰීวͳΔଘࡏɺਅͷଘࡏ
 ΠσΞ = ܕ • ΠσΞքͱײ֮ੈք͕͋Δ
 ܕͷੈքͱΠϯελϯεͷੈք

Slide 27

Slide 27 text

ϓϥτϯͷઆ • ӬԕͰීวͳΔଘࡏɺਅͷଘࡏ
 ΠσΞ = ܕ • ΠσΞքͱײ֮ੈք͕͋Δ
 ܕͷੈքͱΠϯελϯεͷੈք ΠσΞք Ͳ͔͜ผͷੈք

Slide 28

Slide 28 text

ϓϥτϯ ΞϦετςϨε ιΫϥςε

Slide 29

Slide 29 text

ΞϦετςϨεͷઆ • ΋ͷ͸”ܗ૬ͱ࣭ྉ(eidosͱhyle)”Ͱ
 Ͱ͖͍ͯΔ • 4ݪҼ࿦

Slide 30

Slide 30 text

ΞϦετςϨεͷઆ • അͩ

Slide 31

Slide 31 text

ΞϦετςϨεͷઆ • അͩ

Slide 32

Slide 32 text

ΞϦετςϨεͷઆ • അͩ • ͳͥഅͳͷ͔

Slide 33

Slide 33 text

ΞϦετςϨεͷઆ • അͩ • ͳͥഅͳͷ͔ • അͱ͸ • ૸Δ • ஆ͔͍ • …

Slide 34

Slide 34 text

ΞϦετςϨεͷઆ • അͩ • ͳͥഅͳͷ͔ • അͱ͸ • ૸Δ • ஆ͔͍ • … ੑ࣭ͷू·Γ

Slide 35

Slide 35 text

ੑ࣭ ੑ࣭ ੑ࣭ ੑ࣭ ෺࣭తͳ΋ͷ
 (΋ͷΛ۩৅Խͤ͞Δ΋ͷ) ʴ → ܗ૬ ܗ࣭

Slide 36

Slide 36 text

class അ { property method }ɹ ܗ૬ ࣭ྉ

Slide 37

Slide 37 text

ϓϥτϯ ΞϦετςϨε ੑ࣭ ੑ࣭ ੑ࣭

Slide 38

Slide 38 text

ϓϥτϯ ΞϦετςϨε ੑ࣭ ੑ࣭ ੑ࣭ 4ݪҼ࿦͔Β
 ࣮ମΛ؍࡯

Slide 39

Slide 39 text

ۙگใࠂऴΘΓ

Slide 40

Slide 40 text

ۙگใࠂऴΘΓ

Slide 41

Slide 41 text

ࣗ༝ݚڀ • lazy ͳϓϩύςΟΛ let Ͱѻ͏ • Optional Λจࣈྻม׵ͨ͠ͱ͖ʹ “Optional(“text”)” ʹͳ ΔͷΛ΍͚ͬͭΔ protocol

Slide 42

Slide 42 text

lazy ͳϓϩύςΟΛ let Ͱѻ͏

Slide 43

Slide 43 text

ಈػ swift͸lazyΛval/letʹͰ͖ͳ͍͔ΒΫι ‧‪‬‭⛺è䡢(’ω’)䡢è⛺䡡‬‪‧ ͱ͋Δͷਓ

Slide 44

Slide 44 text

swift kotlin

Slide 45

Slide 45 text

swift kotlin ↓

Slide 46

Slide 46 text

swift kotlin kotlin ͷ lazy ͸ function ↓

Slide 47

Slide 47 text

swift kotlin ↓ kotlin ͷ lazy ͸ function Lazy ܕ

Slide 48

Slide 48 text

kotlin ͷ Lazy property Lazy value ॳظԽͷΫϩʔδϟ get delegation

Slide 49

Slide 49 text

Swift Ͱͷ࣮૷ public class Lazy { private let initializer: () -> T private var _value: T! public var value: T { // TODO: mutex switch _value { case .none: _value = initializer() return _value case .some(let v): return v } } public init(initializer: @escaping () -> T) { self.initializer = initializer } } public func lazy(initializer: @escaping () -> T) -> Lazy { return Lazy(initializer: initializer) }

Slide 50

Slide 50 text

swift kotlin ↓

Slide 51

Slide 51 text

swift kotlin ↓

Slide 52

Slide 52 text

swift kotlin ↓ (‘ω’ )

Slide 53

Slide 53 text

swift kotlin ↓ (‘ω’ )
 Swift3 ·Ͱ͸ `v[]`Ͱ͖ͨΜͩ…
 ͜Μͳ͸ͣ͡Όͳ͔ͬͨΜͩ…

Slide 54

Slide 54 text

swift kotlin ↓ let ʹ͸Ͱ͖͔ͨΒ

Slide 55

Slide 55 text

Optional Λจࣈྻม׵ͨ͠ͱ͖ʹ “Optional(“text”)” ʹͳΔͷΛ΍͚ͬͭΔ protocol

Slide 56

Slide 56 text

Optional Λจࣈྻม׵ͨ͠ͱ͖ʹ “Optional(“text”)” ʹͳΔͷΛ΍͚ͬͭΔ protocol ஫:ݸਓతʹ͸ “Optional(“text”)”ͬͯͳΔͷɺ
 Optionalͷૢ࡞ϛεʹର͢ΔռΊΈ͍ͨͰ޷͖Ͱ͢

Slide 57

Slide 57 text

extension Optional: CustomStringConvertible { public var description: String { switch self { case .none: return "" case .some(let wrapped): return "\(wrapped)" } } } "\("sss" as Optional)" ͖ͬ͞ؾ͍͚ͮͨͲɺ
 ͜ΕͰࡁΜͩ ͔ͤͬ͘΍͔ͬͨΒɺ
 ଞͷ΍Γํ΋࿩͠·͢ʂ

Slide 58

Slide 58 text

"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" // -> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal

Slide 59

Slide 59 text

"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" // -> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal զʑͷׯবͰ͖Δ෦෼

Slide 60

Slide 60 text

"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" // -> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal զʑͷׯবͰ͖Δ෦෼ Λ௒͑ͳͯ͘͸͍͚ͳ͍

Slide 61

Slide 61 text

"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" // -> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal զʑͷׯবͰ͖Δ෦෼ Λ௒͑ͳͯ͘͸͍͚ͳ͍

Slide 62

Slide 62 text

खॱ • Swift ͷϓϩδΣΫτΛ࣋ͬͯདྷΔ • cmake ͱ ninja Λ࣋ͬͯདྷΔ • ࠷৽ͷ Xcode Λࢦఆ͢Δ • ม׵จࣈྻΛܾఆ͢Δͱ͜ΖΛม͑Δ
 (https://github.com/ezura/swift/commit/ 6e782f69265224a3b5321f9315039d36428dfcc7) • ίϯύΠϧ

Slide 63

Slide 63 text

"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" // -> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } }

Slide 64

Slide 64 text

͍ͭͰʹ Lazy ΋૊ΈࠐΈ·ͨ͠
 https://github.com/ezura/swift/commit/ 7946a66674f696836321df8d9b189ae0a804eb4c

Slide 65

Slide 65 text

͝੩ௌ
 ͋Γ͕ͱ͏͍͟͝·ͨ͠