美文网首页RXswiftRxSwift学习
RxSwift4.0初体验(二)

RxSwift4.0初体验(二)

作者: Iam光星人 | 来源:发表于2017-11-24 18:14 被阅读130次

    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

    相关文章

      网友评论

        本文标题:RxSwift4.0初体验(二)

        本文链接:https://www.haomeiwen.com/subject/gpmfbxtx.html