RXSwift之基本应用示例(1)

刚开始学习RXSwift,表示Swift都还是刚开始学习的,如果有跟我一样没接触过swift的小伙伴,可以先看看https://www.runoob.com/swift/swift-tutorial.html,重点了解下闭包协议。话不多说,下面介绍一些RXSwift在项目里面的常用示例,相信你会爱上它的。

KVO使用

      假设有一个MyPerson的类,现在要监听这个类的对象的name值的变化

class MyPerson: NSObject {

   var name = "name"

}

var person:MyPerson = MyPerson()

let disposeBag = DisposeBag()

var timer: Observable<Int>!

override func viewDidLoad() {

      super.viewDidLoad()    

      setupKVO()

      setupRXKVO()

}

1、常规KVO使用   

    // MARK: -- 添加KVO

    func setupKVO() {

        self.person.addObserver(self, forKeyPath: "name", options: .new, context: nil)

    }

    // MARK: -- KVO回调

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        print(change as Any)

    }

2、RXSwift-KVO

func setupRXKVO() {

        self.person.rx.observeWeakly(String.self, "name")

            .subscribe(onNext: { (value) in

                print(value! as Any)         // 监听回调

            })

            .disposed(by: disposeBag)      // 添加进垃圾袋自动回收

    }

如果不能监听回调,记得要将name的定义改为

@objc dynamic var name = "name"

 

Button点击响应

      

self.button.rx.tap

     .subscribe(onNext: { () in

          print("点击按钮")

     })

     .disposed(by: disposeBag)

默认是touchUpInside,如果要修改点击模式,可以       

self.button.rx.controlEvent(.touchUpOutside)

 

TextField文案更新监听

   

self.textField.rx.text.orEmpty

      .subscribe(onNext: { (text) in

           print(text)     // 文字变化回调

       })

       .disposed(by: disposeBag)

 

这里也可以将TextField的值与button的title绑定,即textfield的值改变,button的title也会跟着改变

        self.textField.rx.text

            .bind(to: self.button.rx.title())

            .disposed(by: disposeBag)

 

ScrollView滚动监听

 

self.scrollView.rx.contentOffset

      .subscribe(onNext: { [weak self](content) in

             self?.myView.backgroundColor = UIColor.init(red: content.y/255 * 0.9, green: content.y/255 * 0.5, blue: content.y/255 * 0.3, alpha: 1)           // 滚动回调

       })

       .disposed(by: disposeBag)

 

 

手势监听

 

let tap = UITapGestureRecognizer()

self.label.addGestureRecognizer(tap)

self.label.isUserInteractionEnabled = true

tap.rx.event.subscribe(onNext: { (tapGesture) in

      print(tapGesture.view!)

     })

     .disposed(by: disposeBag)

 

NotificationCenter通知

 

NotificationCenter.default.rx.notification(UIResponder.keyboardWillShowNotification) // 监听弹出键盘

        .subscribe(onNext: { (notify) in

            print(notify)

         })

         .disposed(by: disposeBag)

 

Timer定时器

 

timer = Observable<Int>.interval(1, scheduler: MainScheduler.instance)

timer.subscribe(onNext: { (num) in

            print(num)

        })

        .disposed(by: disposeBag)

这里的定时器是不受scrollview滚动影响的

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值