ReactiveCocoa
RAC类关系图:

RAC 信号源:

文本框监听
func racsTest() { textField.reactive.continuousTextValues.observeValues { (text) in print("值为:\(text ?? "")") } }
结果:

Map映射 用于将一个事件流的值操作后的结果产生一个新的事件流。
方法一:
textField.reactive.continuousTextValues.map { (text) -> Int in return (text?.count)!//!.characters.count }.observeValues { (count) in print("数值为:\(count)") }
输入: Hello123
结果为:

方法二:
1 let (signal, observer) = Signal<String, NoError>.pipe() 2 signal.map { (string) -> Int in 3 return string.lengthOfBytes(using: .utf8) 4 }.observeValues { (length) in 5 print("长度length: \(length)") 6 } 7 8 observer.send(value: "123456") 9 10 observer.send(value: "some")
结果为:

filter函数可以按照之前预设的条件过滤掉不满足的值