iOS-swiftiOS DeveloperiOS技术资料

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

2017-06-16  本文已影响1760人  小明2021

之前项目一直用的是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)) // 这样文本框输入的内容就会自动设置成按钮的标题了。
上一篇下一篇

猜你喜欢

热点阅读