在iOS平台使用响应式编程(Functional Reactive Programming,简称FRP),有一个很好的开源项目ReactiveCocoa,ReactiveCocoa简称RAC,它是基于响应式编程思想的Objective-C实践。关于FRP和ReactiveCocoa本文并不过多讲述思想及图例,网上此类文件也很多。这里主要提供一些代码干货。
注:写本文时,已经是Swift 3.0 及 ReactiveCocoa 5.0,RAC 5.0相比以前的版本API有了很大变化,受影响于Swift 3.0升级及自身结构的调整。
以下内容,假设你的开发环境已经OK。
开始吧!Let's do it.
按钮事件监听
button.reactive.trigger(for: .touchUpInside).observeValues { () in
print("按钮点击事件")
}
是不是感觉太简单了。
TextField值变化事件
每一个输入键入后都会调用到这个事件
textField.reactive.continuousTextValues.observeValues { (text) in
print(text!);
}
用户名长度大于3的,可以使用filter.
textField.reactive.continuousTextValues.filter { (text) -> Bool in
let length = text?.lengthOfBytes(using: .utf8)
return length! > 3
}.observeValues { (text) in
print(text!);
}
使用map操作来转换为想要的数据
let validUsernameSignal = textField.reactive.continuousTextValues.map { [unowned self] (text) -> Bool in
return self.isValidUsername(text!)
}
validUsernameSignal.map { (usernameValid) -> UIColor in
return usernameValid ? UIColor.lightGray : UIColor.yellow
}.observeValues { [unowned self] (color) in
self.textField.backgroundColor = color
}
以上是一个验证用户名是否有效的逻辑,改变了输入框的背景颜色。isValidUsername(_:)返回用户名是否有效。
综上,RAC已涵盖大部分控件的常用监听:
其API 都放在了 reactive 后,比较方便。