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

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

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

个人觉得针对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))")
        })
// ???  CGPoint 必须用observeWeakly,否则释放不掉
        _ = self.tableView?.rx.observeWeakly(CGPoint.self, "contentOffset").subscribe(onNext: { [weak self] (value) in
        print("value====\(String(describing: value))")
        if let value = value {
            self?.myObserverAction(newValue: 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)) // 这样文本框输入的内容就会自动设置成按钮的标题了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容