RxSwift在Swift 5.1 中的使用

首先导入

import RxSwift
import RxCocoa

1 RxSwift在UITableView中使用

首先定义数据模型

  let bag = DisposeBag()
    let persons = Observable.just([
        Person(name: "Jack", age: 20),
        Person(name: "Rose", age: 22),
        Person(name: "Kate", age: 25)
    ])

    persons.bind(to: tableView.rx.items(cellIdentifier: "cell")) { row, person, cell in
            cell.textLabel?.text = person.name
            cell.detailTextLabel?.text = "\(person.age)"
        }.disposed(by: bag)

// 监听rx的模型事件

  tableView.rx.itemSelected.subscribe(onNext: { path in
            print("点击了", path)
        }).disposed(by: bag)

tableView.rx.modelSelected(Person.self)
            .subscribe(onNext: { person in
                print("点击了", person)
            }).disposed(by: bag)

将某一个数据和某一个组件绑定

Observable.just(0.1).bind(to: slider.rx.value).disposed(by: bag)

// 组件的监听

_ = slider.rx.value.map { (value) -> Float in
           return value + 1
        }.subscribe(onNext: { text in
           print("结果是======",text);
      })

//监听输入框下的值的变化

 textField.rx.text.orEmpty.subscribe(onNext: { text in
        
            
            print(text ?? "")
       
       }).disposed(by: bag)

//监听Button按钮的点击事件

  button.rx.controlEvent(.touchUpInside).subscribe(onNext: {
            print("按钮被点击了")
       }).disposed(by: bag)

RxSwift可以使用observable可以使用subscribe 来订阅事件,并得到结果,Observable 序列的初始数据都发送完毕,它还会自动发一个 .completed 事件出来

  let observable = Observable.of("A", "B", "C")
        observable.subscribe(onNext: { (text) in
            
            print("text得到的数据==========",text)
        }).disposed(by: bag)

监听事件的生命周期

我们可以使用doOn方法来监听事件的生命周期,他会在每一次事件发送前被调用

 let observable = Observable.of("A", "B", "C")

observable.do(onNext: { (before) in
          

        print("====before")
        
        }, afterNext: { (after) in
            
            print("====after")
        
        }, onError: { (error) in
        
            
             print("====error")
        
        }, afterError: { (afterError) in
         
            
            print("====afterError")
        
        }, onCompleted: {
        
            
            print("====Completed")
            
        }, afterCompleted: {
            
            print("====afterCompleted")
            
        }).subscribe { (text) in
        
            print("text得到的数据==========",text)
        
        }.disposed(by: bag)

我们可以使用dispose() 方法取消一个订阅行为

let observable = Observable.of("A", "B", "C")
        let subscription:Disposable = observable.do(onNext: { (before) in
            
            print("====before")
        
        },afterNext: { (after) in
            
            print("====after")
       }, onError: { (error) in
        
            print("====error")
        }, afterError: { (afterError) in
         
            print("====afterError")
        }, onCompleted: {
        
            print("====Completed")
        }, afterCompleted: {
            
            print("====afterCompleted")
        }).subscribe { (text) in
        
            print("text得到的数据==========",text)
        }
     //调用这个订阅的dispose()方法
     subscription.dispose()

我们可以把一个 DisposeBag对象看成一个垃圾袋,把用户的订阅,而这个dispage在自己将要dealloc的时候,对里面的订阅者都发送dispose()方法

绑定数据

  Observable.just(60).map{ return  "数值:\($0)" + "20" }.subscribe(binder).dispose()

Observable的生命周期执行终止

 let observable = Observable.timer(.seconds(2), period: .seconds(1), scheduler: MainScheduler.instance)
        let _ = observable
            .takeUntil(self.rx.deallocated)
            .map { "数值是:\($0)" }
            .bind(to: label.rx.text)

 

 

 

 

 

你可能感兴趣的:(Swift)