RXswiftRxSwift学习

RxSwift4.0初体验(二)

2017-11-24  本文已影响130人  Iam光星人

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!

总结

以上是本人对最近学习的一个总结和回顾,也希望对刚接触rxswift的同学有所帮助,希望大家可以亲自尝试,查看执行结果,了解执行过程,亦会受益匪浅,一下附上本地人demo:
swift(https://github.com/huangshiguang/rxswiftSimpleTest
oc(https://github.com/huangshiguang/ReativeCocoatest

上一篇下一篇

猜你喜欢

热点阅读