Download - Sansan様 登壇資料
import Foundationimport UIKit#if !RX_NO_MODULEimport RxSwiftimport RxCocoa#endif
class NumbersViewController: ViewController { @IBOutlet weak var number1: UITextField! @IBOutlet weak var number2: UITextField! @IBOutlet weak var number3: UITextField!
@IBOutlet weak var result: UILabel!
override func viewDidLoad() { super.viewDidLoad()
Observable.combineLatest(number1.rx_text, number2.rx_text, number3.rx_text) { textValue1, textValue2, textValue3 -> Int in return (Int(textValue1) ?? 0) + (Int(textValue2) ?? 0) + (Int(textValue3) ?? 0) } .map { $0.description } .bindTo(result.rx_text) .addDisposableTo(disposeBag) }}
https://github.com/ReactiveX/RxSwift
こちらがおきまりのリンク先
●empty
●just
●of
●toObservable
●create
●error
●deffered
自分もコード書きました!!!
https://github.com/daisukenagata/Dbank/tree/RxRealmTest
usernameOutlet.delegate = selflet usernameValid = usernameOutlet.rx_text
.map { $0 == self.userName}
.shareReplay(1)usernameValid
.bindTo(usernameValidOutlet.rx_hidden)
.addDisposableTo(disposeBag)
let url = "http://api.gnavi.co.jp/RestSearcht=json=name"/*Observable<Results<Lap>> - wrap Results as observable*/realm.objects(Lap).asObservable()
.map {laps in "\(laps.count) laps"}
.subscribeNext {[unowned self]text inself.title = text
}.addDisposableTo(disposeBag)
/*Observable<Array<Lap>> - convert Results to Array and wrap as observable*/realm.objects(Lap).sorted("time", ascending: false).asObservableArray()
.map {array in array.prefix(2) }
.bindTo(tableView.rx_itemsWithCellIdentifier("Cell", cellType: UITableViewCell.self)) {row, element, cell incell.textLabel!.text = formatter.stringFromDate(NSDate(timeIntervalSinceReferenceDate: element.time))Alamofire.request(.GET, url)
.responseJSON { response in}.addDisposableTo(disposeBag)
addOneItemButton.rx_tap.map { Lap() }.bindTo(Realm.rx_add()).addDisposableTo(disposeBag)
}
usernameOutlet.delegate = selflet usernameValid = usernameOutlet.rx_text
.map { $0 == self.userName}
.shareReplay(1)usernameValid
.bindTo(usernameValidOutlet.rx_hidden)
.addDisposableTo(disposeBag)
let url = "http://api.gnavi.co.jp/RestSearcht=json=name"/*Observable<Results<Lap>> - wrap Results as observable*/realm.objects(Lap).asObservable()
.map {laps in "\(laps.count) laps"}
.subscribeNext {[unowned self]text inself.title = text
}.addDisposableTo(disposeBag)
/*Observable<Array<Lap>> - convert Results to Array and wrap as observable*/realm.objects(Lap).sorted("time", ascending: false).asObservableArray()
.map {array in array.prefix(2) }
.bindTo(tableView.rx_itemsWithCellIdentifier("Cell", cellType: UITableViewCell.self)) {row, element, cell incell.textLabel!.text = formatter.stringFromDate(NSDate(timeIntervalSinceReferenceDate: element.time))Alamofire.request(.GET, url)
.responseJSON { response in}.addDisposableTo(disposeBag)
addOneItemButton.rx_tap.map { Lap() }.bindTo(Realm.rx_add()).addDisposableTo(disposeBag)
}
usernameOutlet.delegate = selflet usernameValid = usernameOutlet.rx_text
.map { $0 == self.userName}
.shareReplay(1)usernameValid
.bindTo(usernameValidOutlet.rx_hidden)
.addDisposableTo(disposeBag)
let url = "http://api.gnavi.co.jp/RestSearcht=json=name"/*Observable<Results<Lap>> - wrap Results as observable*/realm.objects(Lap).asObservable()
.map {laps in "\(laps.count) laps"}
.subscribeNext {[unowned self]text inself.title = text
}.addDisposableTo(disposeBag)
/*Observable<Array<Lap>> - convert Results to Array and wrap as observable*/realm.objects(Lap).sorted("time", ascending: false).asObservableArray()
.map {array in array.prefix(2) }
.bindTo(tableView.rx_itemsWithCellIdentifier("Cell", cellType: UITableViewCell.self)) {row, element, cell incell.textLabel!.text = formatter.stringFromDate(NSDate(timeIntervalSinceReferenceDate: element.time))Alamofire.request(.GET, url)
.responseJSON { response in}.addDisposableTo(disposeBag)
addOneItemButton.rx_tap.map { Lap() }.bindTo(Realm.rx_add()).addDisposableTo(disposeBag)
}
Hotはストリームを稼働さ
せる性質
Rxのストリームは基本的にSubscribeされた瞬間に各オペレータの動作が始まるようになっています。
ですがHot Observableをストリームの途中に挟むことで、Subscribeを実行するより前にストリームを稼働させることができます。
Subscribeされるまで動作
しない性質
Cold Observableは、Subscribeされる(またはHot変換される)まで動作しないObservableです。稼働していないCold Observableに渡されたメッ
セージは全て処理すらされることなく消滅してしまいます。
/*Observable<Array<Lap>> - convert Results to Array and wrap as observable*/realm.objects(Lap).sorted("time", ascending: false).asObservableArray()
.map {array in array.prefix(2) }
.bindTo(tableView.rx_itemsWithCellIdentifier("Cell", cellType: UITableViewCell.self)) {row, element, cell incell.textLabel!.text = formatter.stringFromDate(NSDate(timeIntervalSinceReferenceDate: element.time))Alamofire.request(.GET, url)
.responseJSON { response in
こちらにJsonデータ
を代入しています。
}.addDisposableTo(disposeBag)addOneItemButton.rx_tap
.map { Lap() }
.bindTo(Realm.rx_add())
.addDisposableTo(disposeBag)}