Swift

Swift Day 22 响应式编程(Reactive Prog

2020-12-27  本文已影响0人  望穿秋水小作坊
1. 什么是响应式编程?比较著名的两个框架是哪两个?
2. RxSwift 的基本介绍
image.png
// 本次 RxSwift 版本环境
RxSwift (5.0.0)
RxCocoa (5.0.0)
3. RxSwift 的三个核心概念是什么?分别做什么?
image.png
4. 最基础用法:创建事件发送者、创建事件订阅者、发送事件
// ①创建observable,在内部发布事件
let observable = Observable<Int>.create {
    (observer) -> Disposable in
    // ②发送事件
    observer.onNext(11)
    observer.onNext(22)
    observer.onCompleted()
    return Disposables.create()
}

// ③subscible() 内部会创建Observer 并监听 observable
observable.subscribe(onNext: { (value) in
    print(value);
}, onError: { (error) in
    print(error)
}, onCompleted: {
    print("onCompleted")
})
5. 几种快速创建 Observable 并且发送事件的方式
// ①通过数组创建,数组每个元素触发一次 onNext
let observable1 = Observable.from([1,2,3])
// ②发送一次事件
let observable2 = Observable.just(1)
// ③通过可变参数创建
let observable3 = Observable.of(1,2,3)
6. 创建带延迟和定时器的 Observable,并将结果设置给 Label 控件
let observable = Observable<Int>.timer(.seconds(2),
                                               period: .seconds(1),
                                               scheduler: MainScheduler.instance)
        // countLabel.rx.text 就是 Binder 也就是 Observer
        observable.map { "数值是:\($0)" }.bind(to: countLabel.rx.text)
7. Disposable 对象用于控制订阅者的生命周期,有常见的三种方式释放订阅,哪三种?
image.png
8. 创建自己初始化的 Observer 实例的两种方式?(AnyObserver、Binder)
// ①通过 AnyObserver 创建自定义 Observer
let observer = AnyObserver<Int>.init { event in
    switch event {
    case .next(let data):
        print(data)
    case .error(let error):
        print(error)
    case .completed:
        print("completed")
    }
}
Observable.just(1).subscribe(observer).dispose()

// ①通过 Binder 创建自定义 Observer
let binder = Binder<Int>.init(countLabel) { (label, value) in
    label.text = "数值:\(value)"
}
Observable.just(1).subscribe(binder).dispose()
9. 让 UILabel 每隔一秒切换隐藏展示,体会 Binder 的用处
// ①通过 Binder 创建自定义 Observer
let binder = Binder<Bool>.init(countLabel) {
    (label, value) in
    label.isHidden = value
}
// ②创建定时发送的 Observable
let observable = Observable<Int>.timer(.seconds(3), period: .seconds(1), scheduler: MainScheduler.instance)
// ③Observer 订阅 Observable
observable.map( {$0 % 2 == 0} ).bind(to: binder).disposed(by: bag)
10. 传统的状态监听方式有哪些(五种)?有什么弊端?(重要)
11. 监听按钮点击
button.rx.tap.subscribe { (evet) in
    print("按钮被点击了",evet)
}.disposed(by: bag)
12. RxSwift 中的 TableView
let data = Observable.just([
    Person(name: "Jack", age: 10),
    Person(name: "Rose", age: 20)
])

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

tableView.rx.modelSelected(Person.self)
    .subscribe(onNext: { print("点击了", $0.name)})
    .disposed(by: bag)
13. Notification 监听
image.png
上一篇 下一篇

猜你喜欢

热点阅读