30天学RxSwift-combineLatest, zip, map

这一节讲几个常用的方法。

combineLatest就是将多个observable打包转换成我们需要的信号。

但这样有时候这种信号仍不是我们想要的,这时我们可以用map来转换一下。

zip和combineLatest有点像。区别在于combineLatest是多个信号中任何一个改变都会打包发送一次,而zip则是所有信号都发生改变之后打包发送。

举个例子,两个输入框和一个按钮,模拟用户名和密码输入。当两个的长度都大于6的时候才是有效的,并将结果绑定在按扭上。用combineLatest则是两个输入框有任何改变都会发送信号给按扭。而zip则是第一个改变了,第二个也要改变才会发送。

let textField1 = UITextField(frame: CGRect(x: 10, y: 10, width: 100, height: 30))

textField1.borderStyle = .RoundedRect

view.addSubview(textField1)

let textField2 = UITextField(frame: CGRect(x: 10, y: 50, width: 100, height: 30))

textField2.borderStyle = .RoundedRect

view.addSubview(textField2)

let button = UIButton(type: .Custom)

button.frame = CGRect(x: 10, y: 90, width: 100, height: 30)

button.setTitleColor(.blackColor(), forState: .Normal)

button.setTitleColor(.redColor(), forState: .Disabled)

view.addSubview(button)

button.setTitle("OK", forState: .Normal)

button.setTitle("Disabled", forState: .Disabled)

Observable

.combineLatest(textField1.rx_text, textField2.rx_text) { ($0, $1) }

.map { $0.characters.count > 6 && $1.characters.count > 6 }

.bindTo(button.rx_enabled)

.addDisposableTo(disposeBag)

你可能感兴趣的:(30天学RxSwift-combineLatest, zip, map)