美文网首页iOS-swiftiOS DeveloperiOS技术资料
5分钟学会RxSwift里面80%的常见用法(3.2.0版)

5分钟学会RxSwift里面80%的常见用法(3.2.0版)

作者: 小明2021 | 来源:发表于2017-06-16 16:25 被阅读1760次

    之前项目一直用的是RAC2.5版,目前是和Swift混编,准备升级到RAC5.0版,发现RAC5.0的文档有点变态,网上看了很多关于RAC5.0的博文,给我的感觉是:“你们是在炫耀自己掌握了多么高深的编程技术了吗?专业术语一大堆、理论好几页、就是不举几个常用的例子”,所以我写了一篇更通俗易懂,5分钟就能学会的博文,希望能帮到大家。(RxSwift 完全可以取代RAC5.0)

    RxSwift常用的方法大概也就这么多了,以后再有常用的方法会即时更新

    Tip: 自己开发了好玩的APP: 《小明搜索》(App Store上搜索:"小明搜索")

    点击下载 "小明搜索"
    1、集必应、百度、搜狗为一体的搜索平台
    2、用户随意收藏或添加自己喜欢的网站
    3、网页文字播放功能
    4、收藏网页的视频,本地播放
    5、附加常用小工具
    6、后台播放网页音频
    7、3D Touch提供便捷入口
    完全自定义的搜索助手,简约的爱不释手~
    该APP不断完善中~

    个人觉得针对Swift项目来说RxSwift要比RAC5.0版本更好理解、更方便应用。RAC2.5版本更适合OC开发。混编的话建议用:RAC2.5和RxSwift3.2结合。

    pod添加方式:

    pod 'RxSwift', '~> 3.2.0'
    pod 'RxCocoa', '~> 3.2.0'
    用的时候需要导入头文件:import RxCocoa

    RxSwift里面的好多方法不能自动提示的解决方案:

    当敲类似textF.rx.text.s 的语法没有提示的情况下,可以敲 textF.rx.text s 就有提示了,有时候点语法不提示,应该是xcode的bug

    备注:

    下面的所有方法都是返回:Disposable 类型,这个类型就一个方法dispose()就是手动关闭监听,一般用不到这个返回值。但是这个库的很多方法没有添加关键字:@discardableResult ,导致调用方法的时候必须用 _ = 来接收返回值,否则有警告。

    1、RxSwift - 通知的用法

    .takeUntil(self.rx.deallocated).作用是:保证页面销毁的时候移除通知

    // 接收通知:
     _ = NotificationCenter.default.rx.notification(Notification.Name("kNotificationTestName")).takeUntil(self.rx.deallocated).subscribe(onNext: { (value) in
                print(value)
            })
    // 发送通知:
    NotificationCenter.default.post(name: Notification.Name(rawValue: "kNotificationTestName"), object: "testContent")
    
    // 监听键盘的通知
    _ = NotificationCenter.default.rx.notification(Notification.Name.UIKeyboardWillHide).takeUntil(self.rx.deallocated).subscribe(onNext: { [unowned self] (value) in
                self.tableView.reloadData()
                print("键盘隐藏了")
            })
    

    2、RxSwift - UITextField输入限制

    // 监听UITextField的内容变化(剪切、粘贴、删除所有的内容都会触发改方法)
    //  subscribe方法只需要一个onNext 参数,其他的参数可以不理会(手动删除其他参数就是下面的代码的样子了)
     _ = textF.rx.text.subscribe(onNext: { (text) in
            print(text ?? "")
      })
    
    

    3、RxSwift - UIButton、SegmentedControl等点击事件

    _ = btn.rx.controlEvent(UIControlEvents.touchUpInside).subscribe(onNext: { [unowned self] in
        print(self.btn)            
      })
    

    4、RxSwift - KVO

    // 监听属性的时候(不能监听基本类型,必须转成NSNumber,并且有dynamic修饰符)
        dynamic var nameStr: String = "test" // 初始化属性
    //  不能用observe 否则会引起循环引用
    _ = self.rx.observeWeakly(String.self, "nameStr").subscribe(onNext: { (value) in
               print(value ?? "")
        })
    // CGRect等类型不能用observeWeakly,否则监听不到
    _ = self.textF.rx.observe(CGRect.self, "frame").subscribe(onNext: { (value) in
                print("frame====\(String(describing: value))")
            })
    

    5、RxSwift - map的用法

    // 把返回的String类型map成UIColor类型
      _ = textF.rx.text.map({ (value) -> UIColor in
                if let value = value , value.characters.count > 5 {
                    return UIColor.red
                } else {
                    return UIColor.green
                }
         }).subscribe(onNext: { [unowned self] (color) in
                self.textF.textColor = color
            })
    

    6、RxSwift - filter的用法

    // 筛选符合一点条件的情况下才执行下面的subscribe方法
    _ = textF.rx.text .filter({ (value) -> Bool in
                if let value = value , value.characters.count > 3 {
                    return true
                }
                return false
            }).subscribe(onNext: { (text) in
                print("==========\(text!)")
            })
    
    

    7、RxSwift - 绑定

    //Rx的重要角色为Observable(被观察者)和Observer(观察者)
    // 把UITextField里的文字赋值给UIButton(把被观察者的值赋值给观察者)
    // UITextField的rx.text属性为ControlProperty类型,实现了ControlPropertyType: ObservableType, ObserverType,所以不仅是观察者类型,还是被观察者类型
     _ = self.textF.rx.text .bindTo(self.btn.rx.title(for: .normal)) // 这样文本框输入的内容就会自动设置成按钮的标题了。
    

    相关文章

      网友评论

        本文标题:5分钟学会RxSwift里面80%的常见用法(3.2.0版)

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