Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift Concurrency時代のリアクティブプログラミングの基礎理解

Swift Concurrency時代のリアクティブプログラミングの基礎理解

ばんじゅん🍓
PRO

September 11, 2022
Tweet

More Decks by ばんじゅん🍓

Other Decks in Programming

Transcript

  1. Swift Concurrency࣌୅ͷ

    ϦΞΫςΟϒϓϩάϥϛϯάͷجૅཧղ
    iOSDC Japan 2022
    גࣜձࣾZOZO
    ςοΫϦʔυ
    ͹Μ͡ΎΜ! / @banjun
    Copyright © ZOZO, Inc.

    View Slide

  2. © ZOZO, Inc.
    2
    גࣜձࣾZOZO
    ςοΫϦʔυ
    ZOZOTOWN iOS
    ͹Μ͡ΎΜ! / @banjun
    -PWF-JWFS NBD04
    $SFBUF-JWF1IPUPTGSPN.PWJFT
    'MJDL4,, J04
    +BQBOFTF$VTUPN,FZCPBSE&YUFOTJPO
    ݸਓϓϩδΣΫτɾ1PEDBTU
    ͖ͷ͜ΔΤϑΤϜX!USFCZ͖ͷ͜Δ

    View Slide

  3. © ZOZO, Inc.
    https://zozo.jp/
    3
    ● ϑΝογϣϯEC
    ● 1,500Ҏ্ͷγϣοϓɺ8,500Ҏ্ͷϒϥϯυͷऔΓѻ͍
    ● ৗ࣌90ສ఺Ҏ্ͷ঎඼ΞΠςϜ਺ͱຖ೔ฏۉ2,600఺Ҏ্ͷ৽ண

    ঎඼Λܝࡌʢ2022೥6݄຤࣌఺ʣ
    ● ϒϥϯυݹணͷϑΝογϣϯκʔϯʮZOZOUSEDʯ΍
    ίεϝઐ໳ϞʔϧʮZOZOCOSMEʯɺۺͷઐ໳Ϟʔϧ
    ʮZOZOSHOESʯɺϥάδϡΞϦʔˍσβΠφʔζκʔϯ
    ʮZOZOVILLAʯΛల։
    ● ଈ೔഑ૹαʔϏε
    ● ΪϑτϥοϐϯάαʔϏε
    ● πέ෷͍ ͳͲ

    View Slide

  4. © ZOZO, Inc.

    View Slide

  5. جૅγϦʔζ΁Α͏ͦ͜

    View Slide

  6. © ZOZO, Inc.
    6
    جૅγϦʔζ΁Α͏ͦ͜
    ʮجૅʯͬͯ
    "ͳΜ͔؆୯ͦ͏ͩ͠ྑͦ͞͏
    #ͳΜ͔ාͦ͏

    View Slide

  7. © ZOZO, Inc.
    7
    جૅγϦʔζ΁Α͏ͦ͜
    ;0;0Ͱ͸ʮجૅʯʮΑ͘Θ͔Δʯ
    γϦʔζͷࣾ಺ษڧձΛ΍ͬͯ·͢
    $ϓϩμΫτͷण໋͸ϥΠϒϥϦ
    ΍ύϥμΠϜͷण໋ΑΓ௕͍
    %ৗʹਖ਼ղͷʮٕज़બఆʯ͕͋Δ
    Θ͚͡Όͳ͍

    View Slide

  8. جૅ
    Ԡ༻ Ԡ༻ Ԡ༻ Ԡ

    View Slide

  9. Ԡ༻ Ԡ༻ Ԡ༻ Ԡ

    جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ جૅ

    View Slide

  10. جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ
    جૅ جૅ
    Ԡ༻ Ԡ༻ Ԡ༻ Ԡ

    View Slide

  11. ࠓ೔͸
    ϦΞΫςΟϒϓϩάϥϛϯά(RP)
    ͱ
    Swift Concurrency

    View Slide

  12. © ZOZO, Inc.
    12
    ࣌୅എܠͱղܾ͍ͨ͠՝୊
    4XJGUͰJ04ΞϓϦΛॻ͚ΔΑ͏ʹͳͬͨ
    ઃܭύλʔϯ͕ྲྀߦΓɺ31 ϦΞΫςΟϒϓϩάϥϛϯά
    ΋
    ྲྀߦͬͨ
    4XJGU6*ͱ$PNCJOF͕ग़ͨ
    4XJGU$PODVSSFODZ͕ग़ͨ
    Θͨͨͪ͠͸Ͳ͜΁޲͔͑͹͍͍ͷ͔ʁ




    View Slide

  13. © ZOZO, Inc.
    13
    ϦΞΫςΟϒϓϩάϥϛϯά(RP)ͱ

    Swift Concurrency
    4XJGU$PODVSSFODZ
    ϦΞΫςΟϒϓϩάϥϛϯά
    ඇಉظϓϩάϥϛϯά
    σʔλετϦʔϜ
    ϥΠϒϥϦͰ͋Δ
    ݴޠͰ͋Δ
    ʮ͍ΘΏΔRPʯΛ
    ࣮ݱ͍ͨ͠
    ฒߦॲཧΛ࣮ݱ͍ͨ͠
    ڞ௨఺

    View Slide

  14. © ZOZO, Inc.
    14
    ʮ͍ΘΏΔRPʯ ※͝஫ҙ
    31ͷࢦ͢΋ͷ͸ॾઆ͋ΔͷͰɺ͜ͷεϥΠυͰ͸ɺΈͳ͞Μ͕J04
    ΞϓϦΛ࡞Δͷʹ࢖͏Α͏ͳ΋ͷΛʮ͍ΘΏΔ31ʯ·ͨ͸୯ʹ
    ʮ31ʯͱݴ͍·͢ɻ
    ͍ΘΏΔRP
    ϦΞΫςΟϒϓϩάϥϛϯά (ҰൠͷRPؚΉ)
    FRP ଞͷRP
    Functional
    Reactive
    Programming
    iOSΞϓϦΛ࡞Δͱ͖ʹ
    ࢖͏RP
    αʔόαΠυ
    Ϋϥ΢υ
    ͱ͔

    View Slide

  15. © ZOZO, Inc.
    15
    ʮ͍ΘΏΔRPʯ ※͝஫ҙ
    ͍ΘΏΔ31Ͱ͸ɺ6*͕ͦ͜31Λ࢖͏ཧ༝ͷத৺ͱͳΔͱ͍͏ಛ௃͕
    ͋Δ
    ͜ΕΒΛܨ͙
    &6*
    &ωοτϫʔΫ
    &ଞʹ΋ɺηϯαʔɾΧϝϥɾपลػثͳͲͳͲ

    View Slide

  16. RPͱपลͷؔ࿈ͷ੔ཧ
    &
    ݱঢ়ͱաڈͷ͢Γ͋Θͤ

    View Slide

  17. © ZOZO, Inc.
    17
    RPؔ࿈ਤ ......ྩ࿨4೥࠷৽൛(งғؾ)
    struct, class, var, didSet, closure, property wrapper, …
    Swiftجຊػೳ
    async/await, AsyncStream, …
    Swift Concurrency
    swift-async-algorithms, AsyncChannel, …
    ඇಉظϓϩάϥϛϯά
    ReactiveSwift
    RxSwift
    Combine
    + UIͷΞμϓλ
    RPϥΠϒϥϦ
    ·ͩͳ͍?
    RPϥΠϒϥϦ (iOSΞϓϦ޲͚)
    RP (Ұൠ)
    ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά
    RP (iOSΞϓϦ)

    View Slide

  18. © ZOZO, Inc.
    18
    RPؔ࿈ਤ ......Swift ConcurrencyҎલ
    struct, class, var, didSet, closure, property wrapper, …
    Swiftجຊػೳ
    ඇಉظϓϩάϥϛϯά
    ReactiveSwift, RxSwift, Combine + UIͷΞμϓλ
    RPϥΠϒϥϦ
    RP (iOSΞϓϦ)
    RPϥΠϒϥϦΛඇಉظ༻్Ͱ
    ࢖͍ͬͯΔέʔε
    ͨͩͷඇಉظ
    completion handlerͱ͔
    ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά
    MVVMͷܨ͗ͱ͔
    completionͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...?

    View Slide

  19. © ZOZO, Inc.
    19
    RPؔ࿈ਤ ......Swift ConcurrencyҎ߱Ͳ͏ม͑Δ͔
    struct, class, var, didSet, closure, property wrapper, …
    Swiftجຊػೳ
    async/await, AsyncStream, …
    Swift Concurrency
    ඇಉظϓϩάϥϛϯά
    ReactiveSwift, RxSwift, Combine
    + UIͷΞμϓλ
    RPϥΠϒϥϦ
    RP (iOSΞϓϦ)
    RPϥΠϒϥϦΛඇಉظ༻్Ͱ
    ࢖͍ͬͯΔέʔε
    ͨͩͷඇಉظ
    ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά
    MVVMͷܨ͗ͱ͔
    async/awaitͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...?
    Swift ConcurrencyΛ
    ࢖ͬͨ΄͏͕
    ྑͦ͞͏
    ͦͷ··
    RPϥΠϒϥϦΛ
    ࢖͏ͱྑͦ͞͏

    View Slide

  20. © ZOZO, Inc.
    20
    struct, class, var, didSet, closure, property wrapper, …
    Swiftجຊػೳ
    async/await, AsyncStream, …
    Swift Concurrency
    ඇಉظϓϩάϥϛϯά
    ReactiveSwift, RxSwift, Combine
    + UIͷΞμϓλ
    RPϥΠϒϥϦ
    RP (iOSΞϓϦ)
    RPϥΠϒϥϦΛඇಉظ༻్Ͱ
    ࢖͍ͬͯΔέʔε
    ͨͩͷඇಉظ
    ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά
    MVVMͷܨ͗ͱ͔
    async/awaitͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...?
    Swift ConcurrencyΛ
    ࢖ͬͨ΄͏͕
    ྑͦ͞͏
    ͦͷ··
    RPϥΠϒϥϦΛ
    ࢖͏ͱྑͦ͞͏
    ͍ΘΏΔRPͷ෦෼΁

    View Slide

  21. UIͱσʔλϑϩʔ

    View Slide

  22. © ZOZO, Inc.
    22
    σʔλϑϩʔ
    31Ͱ͸6*ΛؚΉσʔλϑϩʔΛ੩తʹهड़
    ͢Δͷ͕໨త
    ྫӈͷؔ܎Λ੩తʹهड़͍ͨ͠
    31ͷͳ͍4XJGUͰ͸ɺʮ͜ΕΛ࠶ܭࢉ͢
    Δʯ໋ྩจ͕ඞཁ ੩తʹॻ͚ͳ͍

    ͜ͷྫ: https://reactivecocoa.io/philosophy.html
    in in
    out
    A = B + C
    var a: Int
    var b: Int { didSet { a = b + c } }
    var c: Int { didSet { a = b + c } }

    View Slide

  23. © ZOZO, Inc.
    23
    ໋ྩతͱ͔એݴతͱ͔
    એݴతͷྨٛޠ
    ੩త
    ͦΕͬΆ͍ྫ
    "VUP-BZPVU
    $PEBCMFͰ"1*
    ϦΞΫςΟϒϓϩάϥϛϯά
    ໋ྩతͷྨٛޠ
    ಈతɾखଓత
    ͦΕͬΆ͍ྫ
    खಈϨΠΞ΢τv.frame = ...
    ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42
    खͰσʔλߋ৽updateState(); updateUI()

    View Slide

  24. © ZOZO, Inc.
    એݴతͷྨٛޠ
    ੩త
    ͦΕͬΆ͍ྫ
    "VUP-BZPVU
    $PEBCMFͰ"1*
    ϦΞΫςΟϒϓϩάϥϛϯά
    ໋ྩతͷྨٛޠ
    ಈతɾखଓత
    ͦΕͬΆ͍ྫ
    खಈϨΠΞ΢τv.frame = ...
    ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42
    खͰσʔλߋ৽updateState(); updateUI()
    24
    ઐ໳ಛԽ
    ඼࣭Αͦ͞͏
    ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍
    ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ
    ͍ͭͰ΋ྗٕͰॻ͚Δ
    ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏
    ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘
    ͯ΋ͳΜͱ͔ॻ͚ͦ͏
    ʮ࢓༷ɾઃܭʯʹ͍ۙهड़
    ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ
    ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ
    ໋ྩతͱ͔એݴతͱ͔

    View Slide

  25. © ZOZO, Inc.
    એݴతͷྨٛޠ
    ੩త
    ͦΕͬΆ͍ྫ
    "VUP-BZPVU
    $PEBCMFͰ"1*
    ϦΞΫςΟϒϓϩάϥϛϯά
    ໋ྩతͷྨٛޠ
    ಈతɾखଓత
    ͦΕͬΆ͍ྫ
    खಈϨΠΞ΢τv.frame = ...
    ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42
    खͰσʔλߋ৽updateState(); updateUI()
    25
    ઐ໳ಛԽ
    ඼࣭Αͦ͞͏
    ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍
    ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ
    ͍ͭͰ΋ྗٕͰॻ͚Δ
    ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏
    ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘
    ͯ΋ͳΜͱ͔ॻ͚ͦ͏
    ʮ࢓༷ɾઃܭʯʹ͍ۙهड़
    ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ
    ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ
    ໋ྩతͱ͔એݴతͱ͔

    View Slide

  26. © ZOZO, Inc.
    એݴతͷྨٛޠ
    ੩త
    ͦΕͬΆ͍ྫ
    "VUP-BZPVU
    $PEBCMFͰ"1*
    ϦΞΫςΟϒϓϩάϥϛϯά
    ໋ྩతͷྨٛޠ
    ಈతɾखଓత
    ͦΕͬΆ͍ྫ
    खಈϨΠΞ΢τv.frame = ...
    ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42
    खͰσʔλߋ৽updateState(); updateUI()
    26
    ઐ໳ಛԽ
    ඼࣭Αͦ͞͏
    ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍
    ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ
    ͍ͭͰ΋ྗٕͰॻ͚Δ
    ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏
    ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘
    ͯ΋ͳΜͱ͔ॻ͚ͦ͏
    ʮ࢓༷ɾઃܭʯʹ͍ۙهड़
    ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ
    ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ
    ໋ྩతͱ͔એݴతͱ͔

    View Slide

  27. © ZOZO, Inc.
    એݴతͷྨٛޠ
    ੩త
    ͦΕͬΆ͍ྫ
    "VUP-BZPVU
    $PEBCMFͰ"1*
    ϦΞΫςΟϒϓϩάϥϛϯά
    ໋ྩతͷྨٛޠ
    ಈతɾखଓత
    ͦΕͬΆ͍ྫ
    खಈϨΠΞ΢τv.frame = ...
    ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42
    खͰσʔλߋ৽updateState(); updateUI()
    27
    ઐ໳ಛԽ
    ඼࣭Αͦ͞͏
    ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍
    ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ
    ͍ͭͰ΋ྗٕͰॻ͚Δ
    ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏
    ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘
    ͯ΋ͳΜͱ͔ॻ͚ͦ͏
    ʮ࢓༷ɾઃܭʯʹ͍ۙهड़
    ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ
    ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ
    ໋ྩతͱ͔એݴతͱ͔

    View Slide

  28. © ZOZO, Inc.
    28
    σʔλϑϩʔ
    A = B + C
    C
    B
    A +
    in in
    out
    ͪͳΈʹσʔλϑϩʔͷਤͱ͍͏ͱ
    ԼͷΑ͏ͳײ͡
    ͜ͷྫ: https://reactivecocoa.io/philosophy.html

    View Slide

  29. © ZOZO, Inc.
    29
    σʔλͷശ + ઀ଓͷ໼ҹ
    C
    B
    A +
    ʮม਺ͱ͸ശͰ͋ΔʯശΛܨ͍ͩ΋ͷ͕
    σʔλϑϩʔͰ͋Γ31
    ͨͩ͠σʔλϑϩʔͷശ͸ɺ
    มߋ఻೻ͷػೳΛ΋ͭ͜ͱ
    MutableProperty
    BehaviorRelay
    CurrentValueSubject
    @Published
    ֤ϥΠϒϥϦͰͷʮശʯ

    View Slide

  30. © ZOZO, Inc.
    30
    σʔλͷശ + ઀ଓͷ໼ҹ
    C
    B
    A +
    map
    flatMap
    filter
    combineLatest
    :
    ശͱശͷ઀ଓ͸໼ҹ ্ྲྀɾԼྲྀ͕͋Δ

    ʮΦϖϨʔλʔʯͱݺ͹ΕΔ
    ֤ϥΠϒϥϦͰͷʮ໼ҹʯ

    View Slide

  31. © ZOZO, Inc.
    31
    σʔλͷശ + ઀ଓͷ໼ҹ
    ઀ଓͷ໼ҹ͸ඇಉظͰ΋Α͍ɻ࣌ؒతͳॲཧΛͯ͠΋Α͍ɻ
    ෭࡞༻Λ࣮ߦͯ͠΋Α͍ɻ
    ͜Ε͕31ϥΠϒϥϦͷ࣮૷Λ࢖͏ͱศརͩͱΑ͘ݴΘΕΔ෦෼
    debounce
    throttle
    :
    ୹͍࣌ؒʹͨ͘͞ΜมԽͯ͠΋
    ճ͚ͩ఻͑Δɺͱ͔ ֤ϥΠϒϥϦͰɺ࣌ؒͰ
    ؒҾ͖͢Δʮ໼ҹʯ

    View Slide

  32. © ZOZO, Inc.
    ؅ཧ͢΂͖ঢ়ଶ͸ͲΕ͚ͩ͋Δ͔ ͦΕΛശʹ͢Δ
    ঢ়ଶ͕มΘͬͨͱ͖ɺശ͔Βശ΁఻೻͢΂͖͔ ͦΕΛ໼ҹʹ͢Δ
    σʔλϑϩʔͷ֎͔ΒมߋͰ͖Δശ͸
    σʔλϑϩʔͷ֎΁Өڹ͢Δശ͸
    มߋ఻೻͕͋Δ͚ͩͰɺϝϯόม਺ͷઃܭͱมΘΒͳ͍
    Ұ࣌ม਺΋Ұ࣌తͳശ΋ϝϯόʹ࣋ͨͳ͍͍ͯ͘
    32
    σʔλϑϩʔΛઃܭ͢Δ

    View Slide

  33. © ZOZO, Inc.
    ߏ଄తʹ֎ଆ͔ΒΈΔͱγϯϓϧʹΈ͑Δ
    33
    σʔλϑϩʔΛઃܭ͢Δ

    View Slide

  34. © ZOZO, Inc.
    34
    UIͱͷ઀ଓ(ೖޱɾग़ޱ)
    *#"DUJPOͰड໋͚ͯྩతʹೖྗB.value = text
    6*ΞμϓλͰശ૬౰ͷ΋ͷ͕͋ΔB = fieldB.reactive.textValues
    B
    A PCTFSWF TVCTDSJCF TJOL໋ͯ͠ྩతʹग़ྗlabelA.text = $0
    6*ΞμϓλͰശ૬౰ͷ΋ͷ͕͋ΔlabelA.reactive.text <~ A
    σʔλϑϩʔͷ֎ͱ͸໋ྩతʹ΍ΓͱΓ͢Δ͔ɺϥΠϒϥϦʹ༻ҙ͞Ε
    ͍ͯΔ6*ΞμϓλΛ࢖ͬͯσʔλϑϩʔͷҰ෦ͱͯ͠઀ଓ͢Δ

    View Slide

  35. © ZOZO, Inc.
    APIϨεϙϯε ετϦʔϛϯά payload
    35
    UIҎ֎ͷೖޱɾग़ޱ
    6*ʹ௚͍݁ͯ͠ͳ͍ΠϕϯτΛೖޱ΍ग़ޱͱ͢Δ͜ͱ͸͋Δ
    ηϯαʔ஋
    ݕࡧςΩετ
    ೖޱ
    ηϯαʔ J#FBDPOΛݕ஌ͨ͠ͱ͔ɺͳΜͰ΋

    ωοτϫʔΫ
    ݕࡧςΩετ͕มߋ͞ΕͨΒ"1*ϦΫΤετ
    ग़ޱ

    View Slide

  36. © ZOZO, Inc.
    ֤ϥΠϒϥϦͰͷʮശ૬౰ʯ
    36
    RPͰσʔλϑϩʔʹ઀ଓͰ͖Δ
    ͦͷଞͷϞϊ
    جຊతͳσʔλϑϩʔΛ֦ுͯ͠͞Βʹߴ౓ʹ
    Ͱ͖ΔϞϊ͕֤31ϥΠϒϥϦͰ༻ҙ͞Ε͍ͯΔ
    લड़ͷʮശ૬౰ͷ΋ͷʯͳͲ
    APIϨεϙϯε ετϦʔϛϯά
    payload ηϯαʔ஋
    Signal
    SignalProducer
    Observable
    Publisher

    View Slide

  37. Swift Concurrency͔?
    RP͔?

    View Slide

  38. © ZOZO, Inc.
    38
    ͍ΘΏΔඇಉظϓϩάϥϛϯάͷ෦෼͸ɺ
    ঃʑʹ4XJGU$PODVSSFODZʹ͍ͯ͘͠ͱγϯϓϧ
    Swift Concurrency͔? RP͔?
    ඇಉظϓϩάϥϛϯά
    RPϥΠϒϥϦΛඇಉظ༻్Ͱ
    ࢖͍ͬͯΔέʔε
    ͨͩͷඇಉظ
    Swift ConcurrencyΛ
    ࢖ͬͨ΄͏͕
    ྑͦ͞͏
    σʔλϑϩʔͰܨ͗͜ΊΔͱ͜Ζ͸ɺ31Λ࢖͏
    6*΍ωοτϫʔΫͱͷ઀ଓ͸ࠓޙ΋ඞཁ

    View Slide

  39. © ZOZO, Inc.
    39
    RPؔ࿈ਤ ......࠶ܝʂ͓͞Β͍͠Α͏
    struct, class, var, didSet, closure, property wrapper, …
    Swiftجຊػೳ
    async/await, AsyncStream, …
    Swift Concurrency
    ඇಉظϓϩάϥϛϯά
    ReactiveSwift, RxSwift, Combine
    + UIͷΞμϓλ
    RPϥΠϒϥϦ
    RP (iOSΞϓϦ)
    RPϥΠϒϥϦΛඇಉظ༻్Ͱ
    ࢖͍ͬͯΔέʔε
    ͨͩͷඇಉظ
    ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά
    MVVMͷܨ͗ͱ͔
    async/awaitͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...?
    Swift ConcurrencyΛ
    ࢖ͬͨ΄͏͕
    ྑͦ͞͏
    ͦͷ··
    RPϥΠϒϥϦΛ
    ࢖͏ͱྑͦ͞͏

    View Slide

  40. © ZOZO, Inc.
    40
    ͍ΘΏΔඇಉظϓϩάϥϛϯάͱݴ͍ͬͯΔ͕
    ྫ͑͹͜͏͍͏ͱ͜Ζ
    "1*ίʔϧݸ
    Ұ࿈ͷBTZODGVODΛϩʔΧϧͰ·ͱΊ͍ͨ
    Swift Concurrency͔? RP͔?
    func f() async -> T {
    let a = await fa()
    let b = await fb(a)
    return b
    }
    func request() async -> Response

    View Slide

  41. © ZOZO, Inc.
    41
    31Λ࢖͏ͱ͜Ζ͸ɺঢ়ଶมԽ͕͋Γɺঢ়ଶΛܨ͍ͰσʔλϑϩʔΛ
    ઃܭͰ͖Δͱ͜Ζ
    ྫ͑͹͜͏͍͏ͱ͜Ζ
    ϩʔΧϧείʔϓΛӽ͑ͯ7$΍7.ͷϝϯόม਺ͱͯ͠อ࣋͞ΕΔ
    ঢ়ଶ͕͋Γɺঢ়ଶؒʹ఻೻͕͋Δ ͍͔ͭ͘ͷঢ়ଶ͸6*΍ωοτ
    ϫʔΫʹΑΓมԽ͢Δ

    Swift Concurrency͔? RP͔?

    View Slide

  42. ͓ΘΓʹ

    View Slide

  43. © ZOZO, Inc.
    43
    ͜Μͳ;͏ʹཧղͯ͠΋Β͑ͯͨΒ
    خ͍͠Ͱ͢
    ࢲ͕ͨͪ࢖͖ͬͯͨʮ͍ΘΏΔ31ʯͷཱͪҐஔ͕Θ͔ͬͨʂ
    ΋΍ͬͱͯͨ͠4XJGU$PODVSSFODZ΍ඇಉظͱ31ͱͷҧ͍͕ϋοΩϦͨ͠ʂ
    جૅΛ͓͑͞Δ͜ͱͰɺܧଓతʹϓϩμΫτΛ੒௕ͤ͞Δྗʹ͠Α͏ͱࢥͬͨʂ
    ΋ͬͱ஌Γ͍ͨʂڭ͑ͯ΄͍͠ʂ

    View Slide

  44. View Slide