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

RxSwiftは開発をどう変えたか?

 RxSwiftは開発をどう変えたか?

Yosuke Ishikawa

August 20, 2016
Tweet

More Decks by Yosuke Ishikawa

Other Decks in Technology

Transcript

  1. RxSwi
    は開発を
    どう変えたか?

    View Slide

  2. View Slide

  3. RxSwi

    View Slide

  4. RxSwi
    イベントストリー
    ムを抽象化

    View Slide

  5. -
    -
    -
    -
    -
    -
    -
    [
    a
    ]
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    [
    a
    b
    ]
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    [
    a
    b
    c
    ]
    -
    -
    -
    -
    -
    -
    -

    View Slide

  6. Observable
    イベントストリー
    ムを表す型

    View Slide

  7. l
    e
    t t
    e
    x
    t
    F
    i
    e
    l
    d = U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    (
    )
    l
    e
    t t
    e
    x
    t = t
    e
    x
    t
    F
    i
    e
    l
    d
    .
    r
    x
    _
    t
    e
    x
    t /
    / O
    b
    s
    e
    r
    v
    a
    b
    l
    e
    <
    S
    t
    r
    i
    n
    g
    >

    View Slide

  8. subscribe(_:)
    イベントごとにクロー
    ジャを実行

    View Slide

  9. l
    e
    t t
    e
    x
    t
    F
    i
    e
    l
    d = U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    (
    )
    l
    e
    t t
    e
    x
    t = t
    e
    x
    t
    F
    i
    e
    l
    d
    .
    r
    x
    _
    t
    e
    x
    t
    t
    e
    x
    t
    .
    s
    u
    b
    s
    c
    r
    i
    b
    e { p
    r
    i
    n
    t
    (
    $
    0
    ) }
    イベントごとに値を出力

    View Slide

  10. View Slide

  11. bindTo(_:)
    Observer(
    概念)
    に自動反映する

    View Slide

  12. l
    e
    t t
    e
    x
    t
    F
    i
    e
    l
    d = U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    (
    )
    l
    e
    t l
    a
    b
    e
    l = U
    I
    L
    a
    b
    e
    l
    (
    )
    t
    e
    x
    t
    F
    i
    e
    l
    d
    .
    r
    x
    _
    t
    e
    x
    t
    .
    b
    i
    n
    d
    T
    o
    (
    l
    a
    b
    e
    l
    .
    r
    x
    _
    t
    e
    x
    t
    )
    UITextField
    からUILabel
    に自動反映

    View Slide

  13. View Slide

  14. RxSwi
    はイベントストリー
    ムを抽象化するライブラリ
    イベントストリー
    ムはObservable
    で表される
    subscribe(_:)
    でイベントを個別に受け取れる
    bindTo(_:)
    でイベントストリー
    ムを接続できる

    View Slide

  15. Operator
    Observable
    の変換・
    絞り込み・
    組み合わせ

    View Slide

  16. 変換 : map, flatMap, scan, debounce
    絞り込み : filter, take, skip, distinct
    組み合わせ : zip, combineLatest, merge, sample, concat

    View Slide

  17. t
    e
    x
    t
    F
    i
    e
    l
    d
    .
    r
    x
    _
    t
    e
    x
    t
    .
    m
    a
    p { "
    \
    (
    $
    0
    .
    c
    h
    a
    r
    a
    c
    t
    e
    r
    s
    .
    c
    o
    u
    n
    t
    )
    " }
    .
    b
    i
    n
    d
    T
    o
    (
    l
    a
    b
    e
    l
    .
    r
    x
    _
    t
    e
    x
    t
    )
    UITextField
    の文字数をUILabel
    にバインド

    View Slide

  18. View Slide

  19. View Slide

  20. l
    e
    t b
    u
    t
    t
    o
    n = U
    I
    B
    u
    t
    t
    o
    n
    (
    )
    l
    e
    t t
    e
    x
    t
    F
    i
    e
    l
    d
    1 = U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    (
    )
    l
    e
    t t
    e
    x
    t
    F
    i
    e
    l
    d
    2 = U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    (
    )
    l
    e
    t l
    a
    b
    e
    l = U
    I
    L
    a
    b
    e
    l
    (
    )
    O
    b
    s
    e
    r
    v
    a
    b
    l
    e
    .
    c
    o
    m
    b
    i
    n
    e
    L
    a
    t
    e
    s
    t
    (
    t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    .
    r
    x
    _
    t
    e
    x
    t
    ,
    t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    .
    r
    x
    _
    t
    e
    x
    t
    ) { "
    \
    (
    $
    0
    ) \
    (
    $
    1
    )
    " }
    .
    s
    a
    m
    p
    l
    e
    (
    b
    u
    t
    t
    o
    n
    .
    r
    x
    _
    t
    a
    p
    )
    .
    b
    i
    n
    d
    T
    o
    (
    l
    a
    b
    e
    l
    .
    r
    x
    _
    t
    e
    x
    t
    )
    .
    a
    d
    d
    D
    i
    s
    p
    o
    s
    a
    b
    l
    e
    T
    o
    (
    d
    i
    s
    p
    o
    s
    e
    B
    a
    g
    )

    View Slide

  21. Rx vs
    従来方式
    イベントストリー
    ムの扱いの違い

    View Slide

  22. Rx

    View Slide

  23. c
    l
    a
    s
    s V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r
    : U
    I
    V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r {
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    : U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    : U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r b
    u
    t
    t
    o
    n
    : U
    I
    B
    u
    t
    t
    o
    n
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r l
    a
    b
    e
    l
    : U
    I
    L
    a
    b
    e
    l
    !
    p
    r
    i
    v
    a
    t
    e l
    e
    t d
    i
    s
    p
    o
    s
    e
    B
    a
    g = D
    i
    s
    p
    o
    s
    e
    B
    a
    g
    (
    )
    f
    u
    n
    c v
    i
    e
    w
    D
    i
    d
    L
    o
    a
    d
    (
    ) {
    s
    u
    p
    e
    r
    .
    v
    i
    e
    w
    D
    i
    d
    L
    o
    a
    d
    (
    )
    O
    b
    s
    e
    r
    v
    a
    b
    l
    e
    .
    c
    o
    m
    b
    i
    n
    e
    L
    a
    t
    e
    s
    t
    (
    t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    .
    r
    x
    _
    t
    e
    x
    t
    ,
    t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    .
    r
    x
    _
    t
    e
    x
    t
    ) { "
    \
    (
    $
    0
    ) \
    (
    $
    1
    )
    " }
    .
    s
    a
    m
    p
    l
    e
    (
    b
    u
    t
    t
    o
    n
    .
    r
    x
    _
    t
    a
    p
    )
    .
    b
    i
    n
    d
    T
    o
    (
    l
    a
    b
    e
    l
    .
    r
    x
    _
    t
    e
    x
    t
    )
    .
    a
    d
    d
    D
    i
    s
    p
    o
    s
    a
    b
    l
    e
    T
    o
    (
    d
    i
    s
    p
    o
    s
    e
    B
    a
    g
    )
    }
    }

    View Slide

  24. 水道にホー
    スをつなぐイメー

    View Slide

  25. Observable × 2

    View Slide

  26. combineLatest(_:_:)

    View Slide

  27. sample(_:)

    View Slide

  28. c
    l
    a
    s
    s V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r
    : U
    I
    V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r {
    .
    .
    .
    f
    u
    n
    c v
    i
    e
    w
    D
    i
    d
    L
    o
    a
    d
    (
    ) {
    s
    u
    p
    e
    r
    .
    v
    i
    e
    w
    D
    i
    d
    L
    o
    a
    d
    (
    )
    O
    b
    s
    e
    r
    v
    a
    b
    l
    e
    .
    c
    o
    m
    b
    i
    n
    e
    L
    a
    t
    e
    s
    t
    (
    t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    .
    r
    x
    _
    t
    e
    x
    t
    ,
    t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    .
    r
    x
    _
    t
    e
    x
    t
    ) { "
    \
    (
    $
    0
    ) \
    (
    $
    1
    )
    " }
    .
    s
    a
    m
    p
    l
    e
    (
    b
    u
    t
    t
    o
    n
    .
    r
    x
    _
    t
    a
    p
    )
    .
    b
    i
    n
    d
    T
    o
    (
    l
    a
    b
    e
    l
    .
    r
    x
    _
    t
    e
    x
    t
    )
    .
    a
    d
    d
    D
    i
    s
    p
    o
    s
    a
    b
    l
    e
    T
    o
    (
    d
    i
    s
    p
    o
    s
    e
    B
    a
    g
    )
    }
    }

    View Slide

  29. c
    l
    a
    s
    s V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r
    : U
    I
    V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r {
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    : U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    : U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r b
    u
    t
    t
    o
    n
    : U
    I
    B
    u
    t
    t
    o
    n
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r l
    a
    b
    e
    l
    : U
    I
    L
    a
    b
    e
    l
    !
    @
    I
    B
    A
    c
    t
    i
    o
    n f
    u
    n
    c b
    u
    t
    t
    o
    n
    D
    i
    d
    T
    a
    p
    (
    s
    e
    n
    d
    e
    r
    B
    u
    t
    t
    o
    n
    : U
    I
    B
    u
    t
    t
    o
    n
    )
    l
    a
    b
    e
    l
    .
    t
    e
    x
    t
    = "
    \
    (
    t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    .
    t
    e
    x
    t
    ) \
    (
    t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    .
    t
    e
    x
    t
    )
    "
    }
    }

    View Slide

  30. バケツに水を入れるイメー

    View Slide

  31. UITextField × 2

    View Slide

  32. UILabel

    View Slide

  33. c
    l
    a
    s
    s V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r
    : U
    I
    V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r {
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    : U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    : U
    I
    T
    e
    x
    t
    F
    i
    e
    l
    d
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r b
    u
    t
    t
    o
    n
    : U
    I
    B
    u
    t
    t
    o
    n
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r l
    a
    b
    e
    l
    : U
    I
    L
    a
    b
    e
    l
    !
    @
    I
    B
    A
    c
    t
    i
    o
    n f
    u
    n
    c b
    u
    t
    t
    o
    n
    D
    i
    d
    T
    a
    p
    (
    s
    e
    n
    d
    e
    r
    B
    u
    t
    t
    o
    n
    : U
    I
    B
    u
    t
    t
    o
    n
    )
    l
    a
    b
    e
    l
    .
    t
    e
    x
    t
    = "
    \
    (
    t
    e
    x
    t
    F
    i
    e
    l
    d
    1
    .
    t
    e
    x
    t
    ) \
    (
    t
    e
    x
    t
    F
    i
    e
    l
    d
    2
    .
    t
    e
    x
    t
    )
    "
    }
    }

    View Slide

  34. Rx
    すべてのイベントストリー
    ムの表現手段が同じ
    貯めておいて後で取りに行くという動作がない
    イベントストリー
    ムの依存関係がoperator
    で表され

    View Slide

  35. 現在地の天気アプリ

    View Slide

  36. View Slide

  37. 1.
    ボタンのタップ
    2.
    位置情報の利用の認可状態
    3.
    位置情報
    4.
    天気API
    のレスポンス

    View Slide

  38. e
    n
    u
    m W
    e
    a
    t
    h
    e
    r {
    c
    a
    s
    e S
    u
    n
    n
    y
    , C
    l
    o
    u
    d
    y
    , R
    a
    i
    n
    y
    v
    a
    r d
    e
    s
    c
    r
    i
    p
    t
    i
    o
    n
    : S
    t
    r
    i
    n
    g {
    s
    w
    i
    t
    c
    h s
    e
    l
    f {
    c
    a
    s
    e .
    S
    u
    n
    n
    y
    : r
    e
    t
    u
    r
    n "
    晴 "
    c
    a
    s
    e .
    C
    l
    o
    u
    d
    y
    : r
    e
    t
    u
    r
    n "
    曇 "
    c
    a
    s
    e .
    R
    a
    i
    n
    y
    : r
    e
    t
    u
    r
    n "
    雨"
    }
    }
    }
    天気

    View Slide

  39. f
    i
    n
    a
    l c
    l
    a
    s
    s W
    e
    a
    t
    h
    e
    r
    A
    P
    I {
    s
    t
    a
    t
    i
    c f
    u
    n
    c g
    e
    t
    (
    l
    o
    c
    a
    t
    i
    o
    n l
    o
    c
    a
    t
    i
    o
    n
    : C
    L
    L
    o
    c
    a
    t
    i
    o
    n
    , h
    a
    n
    d
    l
    e
    r
    :
    l
    e
    t d
    e
    l
    a
    y = 1
    .
    0 * D
    o
    u
    b
    l
    e
    (
    N
    S
    E
    C
    _
    P
    E
    R
    _
    S
    E
    C
    )
    l
    e
    t t
    i
    m
    e = d
    i
    s
    p
    a
    t
    c
    h
    _
    t
    i
    m
    e
    (
    D
    I
    S
    P
    A
    T
    C
    H
    _
    T
    I
    M
    E
    _
    N
    O
    W
    , I
    n
    t
    6
    4
    d
    i
    s
    p
    a
    t
    c
    h
    _
    a
    f
    t
    e
    r
    (
    t
    i
    m
    e
    , d
    i
    s
    p
    a
    t
    c
    h
    _
    g
    e
    t
    _
    m
    a
    i
    n
    _
    q
    u
    e
    u
    e
    (
    )
    ) {
    h
    a
    n
    d
    l
    e
    r
    (
    W
    e
    a
    t
    h
    e
    r
    .
    r
    a
    n
    d
    o
    m
    )
    }
    }
    }
    天気API

    View Slide

  40. e
    n
    u
    m L
    o
    c
    a
    t
    i
    o
    n
    S
    t
    a
    t
    u
    s {
    c
    a
    s
    e A
    u
    t
    h
    o
    r
    i
    z
    e
    d
    (
    C
    L
    L
    o
    c
    a
    t
    i
    o
    n
    )
    c
    a
    s
    e D
    e
    n
    i
    e
    d
    v
    a
    r d
    e
    s
    c
    r
    i
    p
    t
    i
    o
    n
    : S
    t
    r
    i
    n
    g {
    s
    w
    i
    t
    c
    h s
    e
    l
    f {
    c
    a
    s
    e .
    A
    u
    t
    h
    o
    r
    i
    z
    e
    d
    (
    l
    e
    t l
    o
    c
    a
    t
    i
    o
    n
    )
    :
    l
    e
    t l
    a
    t
    i
    t
    u
    d
    e = l
    o
    c
    a
    t
    i
    o
    n
    .
    c
    o
    o
    r
    d
    i
    n
    a
    t
    e
    .
    l
    a
    t
    i
    t
    u
    d
    e
    l
    e
    t l
    o
    n
    g
    i
    t
    u
    d
    e = l
    o
    c
    a
    t
    i
    o
    n
    .
    c
    o
    o
    r
    d
    i
    n
    a
    t
    e
    .
    l
    o
    n
    g
    i
    t
    u
    d
    e
    r
    e
    t
    u
    r
    n "
    \
    (
    l
    a
    t
    i
    t
    u
    d
    e
    )
    , \
    (
    l
    o
    n
    g
    i
    t
    u
    d
    e
    )
    "
    c
    a
    s
    e .
    D
    e
    n
    i
    e
    d
    :
    r
    e
    t
    u
    r
    n "
    位置情報 利用 許可 "
    }
    }
    }
    位置情報 +
    認可情報

    View Slide

  41. 従来のUIViewController

    View Slide

  42. c
    l
    a
    s
    s G
    e
    o
    W
    e
    a
    t
    h
    e
    r
    V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r
    : U
    I
    V
    i
    e
    w
    C
    o
    n
    t
    r
    o
    l
    l
    e
    r
    , C
    L
    L
    o
    c
    a
    t
    i
    o
    n
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r l
    o
    c
    a
    t
    i
    o
    n
    L
    a
    b
    e
    l
    : U
    I
    L
    a
    b
    e
    l
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r w
    e
    a
    t
    h
    e
    r
    L
    a
    b
    e
    l
    : U
    I
    L
    a
    b
    e
    l
    !
    @
    I
    B
    O
    u
    t
    l
    e
    t w
    e
    a
    k v
    a
    r b
    u
    t
    t
    o
    n
    : U
    I
    B
    u
    t
    t
    o
    n
    !
    v
    a
    r l
    o
    c
    a
    t
    i
    o
    n
    S
    t
    a
    t
    u
    s
    : L
    o
    c
    a
    t
    i
    o
    n
    S
    t
    a
    t
    u
    s
    ? {
    d
    i
    d
    S
    e
    t {
    l
    o
    c
    a
    t
    i
    o
    n
    L
    a
    b
    e
    l
    .
    t
    e
    x
    t
    = l
    o
    c
    a
    t
    i
    o
    n
    S
    t
    a
    t
    u
    s
    ?
    .
    d
    e
    s
    c
    r
    i
    p
    t
    i
    o
    n ?
    ? "
    -
    "
    }
    }
    v
    a
    r w
    e
    a
    t
    h
    e
    r
    : W
    e
    a
    t
    h
    e
    r
    ? {
    d
    i
    d
    S
    e
    t {
    w
    e
    a
    t
    h
    e
    r
    L
    a
    b
    e
    l
    .
    t
    e
    x
    t
    = w
    e
    a
    t
    h
    e
    r
    ?
    .
    d
    e
    s
    c
    r
    i
    p
    t
    i
    o
    n ?
    ? "
    -
    "
    }
    }
    }

    View Slide

  43. @
    I
    B
    A
    c
    t
    i
    o
    n f
    u
    n
    c b
    u
    t
    t
    o
    n
    D
    i
    d
    T
    a
    p
    (
    s
    e
    n
    d
    e
    r
    B
    u
    t
    t
    o
    n
    : U
    I
    B
    u
    t
    t
    o
    n
    ) {
    s
    t
    a
    r
    t
    U
    p
    d
    a
    t
    i
    n
    g
    L
    o
    c
    a
    t
    i
    o
    n
    (
    )
    }
    f
    u
    n
    c s
    t
    a
    r
    t
    U
    p
    d
    a
    t
    i
    n
    g
    L
    o
    c
    a
    t
    i
    o
    n
    (
    ) {
    l
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    .
    d
    e
    l
    e
    g
    a
    t
    e = s
    e
    l
    f
    s
    w
    i
    t
    c
    h C
    L
    L
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    .
    a
    u
    t
    h
    o
    r
    i
    z
    a
    t
    i
    o
    n
    S
    t
    a
    t
    u
    s
    (
    ) {
    c
    a
    s
    e .
    N
    o
    t
    D
    e
    t
    e
    r
    m
    i
    n
    e
    d
    :
    l
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    .
    r
    e
    q
    u
    e
    s
    t
    W
    h
    e
    n
    I
    n
    U
    s
    e
    A
    u
    t
    h
    o
    r
    i
    z
    a
    t
    i
    o
    n
    (
    )
    c
    a
    s
    e .
    A
    u
    t
    h
    o
    r
    i
    z
    e
    d
    A
    l
    w
    a
    y
    s
    , .
    A
    u
    t
    h
    o
    r
    i
    z
    e
    d
    W
    h
    e
    n
    I
    n
    U
    s
    e
    :
    l
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    .
    s
    t
    a
    r
    t
    U
    p
    d
    a
    t
    i
    n
    g
    L
    o
    c
    a
    t
    i
    o
    n
    (
    )
    c
    a
    s
    e .
    D
    e
    n
    i
    e
    d
    , .
    R
    e
    s
    t
    r
    i
    c
    t
    e
    d
    :
    l
    o
    c
    a
    t
    i
    o
    n
    S
    t
    a
    t
    u
    s = .
    D
    e
    n
    i
    e
    d
    w
    e
    a
    t
    h
    e
    r = n
    i
    l
    }
    }

    View Slide

  44. /
    / M
    A
    R
    K
    : C
    L
    L
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    D
    e
    l
    e
    g
    a
    t
    e
    f
    u
    n
    c l
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    (
    m
    a
    n
    a
    g
    e
    r
    : C
    L
    L
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    , d
    i
    d
    C
    h
    a
    n
    g
    e
    A
    u
    s
    t
    a
    r
    t
    U
    p
    d
    a
    t
    i
    n
    g
    L
    o
    c
    a
    t
    i
    o
    n
    (
    )
    }
    f
    u
    n
    c l
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    (
    m
    a
    n
    a
    g
    e
    r
    : C
    L
    L
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    , d
    i
    d
    U
    p
    d
    a
    t
    e
    L
    o
    g
    u
    a
    r
    d l
    e
    t l
    o
    c
    a
    t
    i
    o
    n = l
    o
    c
    a
    t
    i
    o
    n
    s
    .
    f
    i
    r
    s
    t e
    l
    s
    e {
    r
    e
    t
    u
    r
    n
    }
    l
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    .
    s
    t
    o
    p
    U
    p
    d
    a
    t
    i
    n
    g
    L
    o
    c
    a
    t
    i
    o
    n
    (
    )
    l
    o
    c
    a
    t
    i
    o
    n
    M
    a
    n
    a
    g
    e
    r
    .
    d
    e
    l
    e
    g
    a
    t
    e = n
    i
    l
    W
    e
    a
    t
    h
    e
    r
    A
    P
    I
    .
    g
    e
    t
    (
    l
    o
    c
    a
    t
    i
    o
    n
    : l
    o
    c
    a
    t
    i
    o
    n
    )
    { [
    w
    e
    a
    k s
    e
    l
    f
    ] w
    e
    a
    t
    h
    e
    r i
    n
    s
    e
    l
    f
    ?
    .
    l
    o
    c
    a
    t
    i
    o
    n
    S
    t
    a
    t
    u
    s = .
    A
    u
    t
    h
    o
    r
    i
    z
    e
    d
    (
    l
    o
    c
    a
    t
    i
    o
    n
    )
    s
    e
    l
    f
    ?
    .
    w
    e
    a
    t
    h
    e
    r = w
    e
    a
    t
    h
    e
    r
    }
    }

    View Slide

  45. コー
    ドの実行を追ってみると...

    View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. View Slide

  53. View Slide

  54. パッと全体のフロー
    を把握するのは難しい

    View Slide

  55. Rx
    のUIViewController

    View Slide

  56. Live!

    View Slide

  57. 複雑な制御もバインドだけで実装できた
    制御の依存関係が見えるようになった

    View Slide

  58. まとめ
    RxSwi
    は開発をどう変えたか?

    View Slide

  59. イベントストリー
    ムを宣言的に扱えるようになった
    複雑なイベントストリー
    ムでも全体を把握しやすい
    ストアドプロパティによる状態管理を減らせる

    View Slide

  60. RxSwi
    どうですか?

    View Slide

  61. 宣伝
    Swi
    の本を出します

    View Slide

  62. 言語の基礎仕様 +
    言語仕様を活かした書き方
    Swi 3.0
    対応
    冬に出る予定です!

    View Slide