$30 off During Our Annual Pro Sale. View Details »

Swiftのmapからその次へ

oyuk
August 04, 2016

 Swiftのmapからその次へ

oyuk

August 04, 2016
Tweet

More Decks by oyuk

Other Decks in Programming

Transcript

  1. Swiftͷmap͔Βͦͷ࣍
    ΁
    2016/08/04
    oyuk(@oydku)

    View Slide

  2. ࣗݾ঺հ
    • oyuk(@oydku)
    • iosΞϓϦΤϯδχΞ!

    View Slide

  3. Swiftͷmap
    map͕࢖͑Δ΍ͭΒ͍͔ͭ͋͘ΔΑͶ
    • Optional (Enum)
    • Array (CollectionType)
    • ObservableType (RxSwift)
    ଞʹ͔͋ͬͨ΋Ͷɻ͋ͬͨΒڭ͑ͯ

    View Slide

  4. mapͷఆٛΛݟΔ
    Optional
    func map(@noescape f: (Wrapped) throws -> U) rethrows -> U?
    Array
    func map(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]
    ObservableType
    public func map(selector: Self.E throws -> R) -> RxSwift.Observable

    View Slide

  5. ڞ௨఺͋ΔΑͶ!

    View Slide

  6. ͍͍ͩͨ͜Μͳײ͡
    func map(f:T -> U) -> ͋Δ෺

    View Slide

  7. ͍͍ͩͨ͜Μͳײ͡
    func map(f:T -> U) -> ͋Δ෺
    Optional
    func map(@noescape f: (Wrapped) throws -> U) rethrows -> U?
    • Wrapped->Uͷؔ਺ΛWrappedʹద༻ͯ͠U?Λฦ͢
    • ͋Δ෺͸͜͜Ͱ͸U?

    View Slide

  8. ͍͍ͩͨ͜Μͳײ͡
    func map(f:T -> U) -> ͋Δ෺
    Array
    func map(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]
    • Self.Generator.Element->Tͷؔ਺Λ
    Self.Generator.Elementʹద༻ͯ͠[T]Λฦ͢
    • ͋Δ෺͸͜͜Ͱ͸[U]

    View Slide

  9. ͍͍ͩͨ͜Μͳײ͡
    func map(f:T -> U) -> ͋Δ෺
    ObservableType
    public func map(selector: Self.E throws -> R) -> RxSwift.Observable
    • Self.E->Rͷؔ਺ΛSelf.Eʹద༻ͯ͠
    RxSwift.ObservableΛฦ͢
    • ͋Δ෺͸͜͜Ͱ͸RxSwift.Observable

    View Slide

  10. Μʁ

    View Slide

  11. Ͳͷmap΋ಉ͡ʢ͖ͬ͞ݴͬͨʣ
    func map(f:T -> U) -> ͋Δ෺
    • ͋Δ෺ʹؔ਺(T->U)Λద༻ͯ͋͠Δ෺Λฦ͢

    View Slide

  12. ۩ମతʹ
    func map(f:Int -> String) -> Optional
    Optional
    let o:Optional = Optional(1).map{String($0)}

    View Slide

  13. ۩ମతʹ
    func map(f:Int -> String) -> Array
    Array
    let a:Array = Array(arrayLiteral: 1,2,3).map {String($0)}

    View Slide

  14. ۩ମతʹ
    func map(f:Int -> String) -> Observable
    ObservableType
    let o:Observable = Observable.just(1).map{String($0)}

    View Slide

  15. ΈΜͳಉͩ͡Ͷʢ͖ͬ͞ݴͬͨʣ
    let a:͋Δ෺ = ͋Δ෺.map{U($0)}
    • ͋Δ෺͕
    • Optional
    • Array
    • Observable
    ʹͳΔΘ͚Ͱ͢ͳ

    View Slide

  16. ͋Δ෺ͬͯԿʁ

    View Slide

  17. Functor
    • શମΛҠͤΔ΋ͷΛද͢
    • ؔखͱ͍͏Β͍͠
    • ശʹྫ͑ΒΕΔࣄ͕͋Δ
    Πϝʔδ
    let a:Functor = Functor.map{U($0)}

    View Slide

  18. Functor
    let o:Optional = Optional(1).map{String($0)}
    map͕͍ͯ͠Δ͜ͱ͸
    1. Optionalͱ͍͏ശͷத਎ΛऔΓग़͠ɺ͜ΕΛ$0ͱ͢
    Δɻ
    2. $0ΛStringʹΩϟετ
    3. $0ΛOptionalͱ͍͏ശʹೖΕͯฦ͢

    View Slide

  19. Functor
    let a:Array = Array(arrayLiteral: 1,2,3).map {String($0)}
    map͕͍ͯ͠Δ͜ͱ͸
    1. Arrayͱ͍͏ശͷத਎ΛऔΓग़͠ɺ͜ΕΛ$0ͱ͢Δɻ
    2. $0ʢ֤ཁૉʣΛStringʹΩϟετ
    3. $0ΛArrayͱ͍͏ശʹೖΕͯฦ͢

    View Slide

  20. Functor
    let o:Observable = Observable.just(1).map{String($0)}
    map͕͍ͯ͠Δ͜ͱ͸
    1. Observableͱ͍͏ശͷத਎ΛऔΓग़͠ɺ͜ΕΛ$0ͱ͢
    Δɻ
    2. $0ΛStringʹΩϟετ
    3. $0ΛObservableͱ͍͏ശʹೖΕͯฦ͢

    View Slide

  21. ·ͱΊ
    • mapͷഎޙʹ͸Functorͱ͍͏֓೦͕͋Δ
    • Functor͸શମΛҠͤΔ෺Λ͋ΒΘ͢
    • ࠓճͷྫͰ͸Optional,Array,Observable
    • શମΛҠ͢ಈ࡞͕mapͰ͋Δ

    View Slide