11、filter(filter操作符将通过你提供的判定方法过滤一个 Observable)
func filterTest2() -> Void {
Observable.of(1,2,32,44,56,7).filter({ (result) -> Bool in
if result > 32{
return true
}else{
return false
}
}).subscribe(onNext: { (result) in
print(result)
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
12、map(map 操作符将源 Observable 的每个元素应用你提供的转换方法,然后返回含有转换结果的 Observable。)
func mapTest() -> Void {
Observable.of(1,2,3).map{ (result) -> AnyObject in
if(result>2){
return result as AnyObject
}else{
return "" as AnyObject
}
}.asObservable().subscribe(onNext: { (result) in
print(result)
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
func mapTest1() -> Void {
Observable.of(1, 2, 3).map { "\($0)\($0)"}.asObservable().subscribe(onNext: { (result) in
print(result)
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
map和filter对比(限制输入框位数)
func mapTest2() -> Void {
textfield.rx.text.asObservable().map { (result) -> String in
let str = result! as NSString
if str.length > 11{
return str.substring(to: 11) as String
}else{
return str as String
}
}.asObservable().subscribe(onNext: {[unowned self] (result) in
print(result)
self.textfield.text = result
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
func filterTest3() -> Void {
textfield.rx.text.asObservable().filter { (result) -> Bool in
let str = result! as NSString
if str.length > 11{
return true
}else{
return false
}
}.asObservable().subscribe(onNext: {[unowned self] (result) in
print(result)
var str = result! as NSString
str = str.substring(to: 11) as NSString
self.textfield.text = str as String
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
13、bind(双向绑定)
var lab = UILabel()
var textfield = UITextField()
func binding() -> Void {
var resultStr = ""
textfield.rx.text.bind(to:lab.rx.text).disposed(by: self.disposeBag)
textfield.rx.text.asObservable().filter({ (result) -> Bool in
var str = result! as NSString
print(str)
str = str.replacingOccurrences(of: " ", with: "") as NSString
if(str.length > 11){
str = str.substring(to: 11) as NSString
resultStr = str as String
return false
}else{
return true
}
}).subscribe(onNext: { (result) in
print(result)
print(resultStr)
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
14、button点击事件的处理
var button = UIButton()
self.view.addSubview(button)
button.addTarget(self, action: #selector(btn), for: UIControlEvents.touchUpInside)
//button的点击事件
func rxCocoaTest() -> Void {
let observable = button.rx.tap.asObservable()
observable.subscribe(onNext: { (result) in
print("button点击")
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
//原生方法
@objc func btn() -> Void {
singleFoucation9()
let vc = FirstViewController()
self.present(vc, animated: true, completion: nil)
}
15、cell复用问题处理
// 在cell里定义
var disposeBags: DisposeBag?
// 重写重用方法的回调
override func prepareForReuse() {
super.prepareForReuse()
self.disposeBags = nil
}
// vc里的cell的使用
inputCell?.textField.rx.text.asObservable().filter({ (result) -> Bool in
var str = result! as NSString
str = str.replacingOccurrences(of: " ", with: "") as NSString
if(str.length > 11){
str = str.substring(to: 11) as NSString
self.inputCell?.textField.text = str as String
return false
}else{
return true
}
}).subscribe(onNext: { [unowned self] (result) in
self.viewModel.phoneNum.value = result!
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: (inputCell?.disposeBags)!)
return inputCell!
总结