Slide 1

Slide 1 text

RxSwift Ͱ࡞Δ UITableView ϦίʔITιϦϡʔγϣϯζגࣜձࣾ Taketo CHIBA

Slide 2

Slide 2 text

ࣗݾ঺հ • ઍ༿ݐਓ • twitter: @taketomato • 2006೥ೖࣾͣͬͱϓϩάϥϜͤͣ • 2014೥͔ΒiOSΤϯδχΞ

Slide 3

Slide 3 text

Why RxSwfit ? • ࠓ೥3݄ try! Swift ͷલ೔ʹαΠόʔΤʔδΣϯτͷ ษڧձʹࢀՃ • ൃද͕΄΅ RxSwift ʹؔ͢Δ಺༰

Slide 4

Slide 4 text

Why RxSwfit ? ʮ࣌୅͸ϦΞΫςΟϒͳͷ͔ʁʯ

Slide 5

Slide 5 text

Why RxSwfit ? ࣍ʹ࡞ΔΞϓϦͰ࢖͏͔͠ͳ͍ʂʂ

Slide 6

Slide 6 text

What is RxSwfit ? • ReactiveX (Reactive Extensions) ͷ Swift ࣮૷ • ϦΞΫςΟϒϓϩάϥϛϯάΛ࣮ݱ͢Δͨ ΊͷσβΠϯͱɺͦͷ࣮૷ϥΠϒϥϦ • RxJAVA ΍ RxJS ͳͲ֤ݴޠ/ϓϥοτϑΥʔ Ϝ༻ͷ࣮૷͕͋Δ

Slide 7

Slide 7 text

• ஋ͷؔ܎ੑΛهड़ͯ͠ϓϩάϥϛϯά͢Δ • ैདྷͷํ๏ΑΓهड़͕γϯϓϧʹͳΔ͜ͱ ͕ଟ͍ What is RxSwfit ?

Slide 8

Slide 8 text

Πϝʔδͱͯ͠͸ ໋ྩܕ ϦΞΫςΟϒ ※࣮ࡍͷίʔυͰ͸͋Γ·ͤΜ

Slide 9

Slide 9 text

Πϝʔδͱͯ͠͸ ໋ྩܕ ϦΞΫςΟϒ ※࣮ࡍͷίʔυͰ͸͋Γ·ͤΜ ؔ܎Λهड़͓ͯ͘͠ͱɺ มߋ͕͋Δͨͼʹมߋ͕఻ൖ͞Εਖ਼͍݁͠Ռ͕ಘΒΕΔ

Slide 10

Slide 10 text

Words • Πϕϯτ: ௨৴΍UI෦඼ͷλοϓɺσʔλͷߋ৽ͳͲ • Observable: ΠϕϯτΛഉग़͢ΔݩͱͳΔ΋ͷ • Observer: ΠϕϯτΛ؍ଌ͢Δ΋ͷ • Subscribe: Observer ͕؍ଌΛ࢝ΊΔ͜ͱ • bind: Observable ͱ Observer Λඥ͚ͮΔ͜ͱ

Slide 11

Slide 11 text

͖͞΄ͲͷΠϝʔδͩͱ

Slide 12

Slide 12 text

͖͞΄ͲͷΠϝʔδͩͱ Observable

Slide 13

Slide 13 text

͖͞΄ͲͷΠϝʔδͩͱ Observable Observer

Slide 14

Slide 14 text

͖͞΄ͲͷΠϝʔδͩͱ Observable Observer bind

Slide 15

Slide 15 text

͖͞΄ͲͷΠϝʔδͩͱ Observable Observer bind Πϕϯτ(஋ͷมߋ)

Slide 16

Slide 16 text

RxSwift Λ࢖ͬͯ Let’s ࣮૷ ΍Δ͜ͱ 1. ഑ྻσʔλΛ UITableView ʹදࣔͰ͖ΔΑ͏ʹ͢Δ 2. Realm ͷσʔλΛ UITableView ʹදࣔͰ͖ΔΑ͏ʹ͢Δ 3. Realm ͷσʔλΛηΫγϣϯදࣔͰ͖ΔΑ͏ʹ͢Δ * Realm…ϞόΠϧ޲͚σʔλϕʔε

Slide 17

Slide 17 text

ࣄલ४උ • RxSwift / RxRealm / RxDataSources ͷಋೖ͕ඞཁ • CocoaPods / Carthage ͰಋೖͰ͖·͢ github "ReactiveX/RxSwift" ~> 3.0 github “RxSwiftCommunity/RxRealm" github "RxSwiftCommunity/RxDataSources" ~> 1.0 Cartfile ίϚϯυ $ carthage update

Slide 18

Slide 18 text

1. ഑ྻσʔλΛ UITableView ʹදࣔͰ͖Δ Α͏ʹ͢Δ arrayObservable .bind(to: tableView.rx.items(cellIdentifier: “Cell")) { row, element, cell in // セルの設定 } .addDisposableTo(disposeBag)

Slide 19

Slide 19 text

1. ഑ྻσʔλΛ UITableView ʹදࣔͰ͖Δ Α͏ʹ͢Δ arrayObservable .bind(to: tableView.rx.items(cellIdentifier: “Cell")) { row, element, cell in // セルの設定 } .addDisposableTo(disposeBag) Observable Observer

Slide 20

Slide 20 text

1. ഑ྻσʔλΛ UITableView ʹදࣔͰ͖Δ Α͏ʹ͢Δ arrayObservable .bind(to: tableView.rx.items) { tableView, row, element in // セルの設定 } .addDisposableTo(disposeBag) arrayObservable .bind(to: tableView.rx.items(dataSource: dataSource)) .addDisposableTo(disposeBag)

Slide 21

Slide 21 text

2. Realm ͷ σʔλΛ UITableView ʹද ࣔͰ͖ΔΑ͏ʹ͢Δ Observable.changeset(from: realmResult) .subscribe(onNext: { [weak self] results, changes in // tableView の更新 }) .addDisposableTo(disposeBag) • RxRealm Ͱ༻ҙ͞Ε͍ͯΔϝιουΛ࢖͏͜ͱͰɺRealm ͷมߋΛ؂ࢹ͢Δ͜ͱ͕Ͱ͖·͢

Slide 22

Slide 22 text

2. Realm ͷ σʔλΛ UITableView ʹද ࣔͰ͖ΔΑ͏ʹ͢Δ Observable.changeset(from: realmResult) .subscribe(onNext: { [weak self] results, changes in // tableView の更新 }) .addDisposableTo(disposeBag) • RxRealm Ͱ༻ҙ͞Ε͍ͯΔϝιουΛ࢖͏͜ͱͰɺRealm ͷมߋΛ؂ࢹ͢Δ͜ͱ͕Ͱ͖·͢ Observable Observer

Slide 23

Slide 23 text

3. Realm ͷσʔλΛηΫγϣϯදࣔͰ ͖ΔΑ͏ʹ͢Δ • ઐ༻ͷ datasource Λ༻ҙ͢Δ • Realm σʔλΛखಈͰηΫγϣϯ෼ྨ͢Δ (=SectionModel) • SectionModel ͷ Observable Λ bind ͢Δ

Slide 24

Slide 24 text

3. Realm ͷσʔλΛηΫγϣϯදࣔͰ ͖ΔΑ͏ʹ͢Δ let dataSource = RxTableViewSectionedReloadDataSource >() sectionModelObservable .bind(to: tableView.rx.items(dataSource: dataSource)) .addDisposableTo(disposeBag)

Slide 25

Slide 25 text

3. Realm ͷσʔλΛηΫγϣϯදࣔͰ ͖ΔΑ͏ʹ͢Δ let dataSource = RxTableViewSectionedReloadDataSource >() sectionModelObservable .bind(to: tableView.rx.items(dataSource: dataSource)) .addDisposableTo(disposeBag) datasource sectionModel ͷ Observable

Slide 26

Slide 26 text

3. Realm ͷσʔλΛηΫγϣϯදࣔͰ ͖ΔΑ͏ʹ͢Δ let dataSource = RxTableViewSectionedReloadDataSource >() sectionModelObservable .bind(to: tableView.rx.items(dataSource: dataSource)) .addDisposableTo(disposeBag) ·ͩࣗಈߋ৽Ͱ͖͍ͯ·ͤΜ (; _ ;)

Slide 27

Slide 27 text

·ͱΊ • RxSwift Λ࢖͏͜ͱͰ UITableView ͕؆ܿʹߏஙͰ ͖Δ • UIߋ৽ͱσʔλͷ؅ཧΛ෼཭͢Δ͜ͱ͕Ͱ͖Δ • ධ൑௨Γֶशίετ͸ߴ͍…·ͩ·ͩษڧ͕ඞཁ

Slide 28

Slide 28 text

αϯϓϧίʔυ • ͷͪ΄Ͳ Github Ͱެ։͠·͢

Slide 29

Slide 29 text

Library ReactiveX : http://reactivex.io/ RxSwift: https://github.com/ReactiveX/RxSwift RxRealm: https://github.com/RxSwiftCommunity/RxRealm RxDataSources: https://github.com/RxSwiftCommunity/RxDataSources

Slide 30

Slide 30 text

ࢀߟ Link ϦΞΫςΟϒϓϩάϥϛϯά΁ͷཧղ͕ΠϚΠνͩͬͨͷͰ·ͱΊͯΈ ͨ http://system.blog.uuum.jp/entry/ %E3%83%AA%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3 %83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82 %B0%E3%81%B8%E3%81%AE%E7%90%86%E8%A7%A3%E3%81%8C%E3%82%A 4%E3%83%9E%E3%82%A4%E3%83%81%E3%81%A0%E3%81%A3 SwiftͰRealmΛ࢖͏࣌ͷTips - Qiita http://qiita.com/nakau1/items/ a591d9cc34e5b575ceb5 RxSwiftͷUITableViewͱͷόΠϯσΟϯά·ͱΊ - Qiita http://qiita.com/ hironytic/items/71bc729abe73ab9f0879

Slide 31

Slide 31 text

THANKS!!