RxSwift4.0初体验(二)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇文章介主要绍RxJava中操作符是以函数作为基本单位,与响应式编程作为结合使用的,对什么是操作、操作符都有哪些...
    嘎啦果安卓兽阅读 2,927评论 0 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy阅读 5,661评论 7 62
  • 1、概述 Databinding 是一种框架,MVVM是一种模式,两者的概念是不一样的。我的理解DataBindi...
    Kelin阅读 76,939评论 68 520
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,096评论 0 29