美文网首页Swift
Swift Day 22 响应式编程(Reactive Prog

Swift Day 22 响应式编程(Reactive Prog

作者: 望穿秋水小作坊 | 来源:发表于2020-12-27 22:14 被阅读0次
1. 什么是响应式编程?比较著名的两个框架是哪两个?
  • 响应式编程(Reactive Programming,简称 RP)
  • 也是一种编程范式,于 1997 年提出,可以简化异步编程,提供更优雅的数据绑定
  • 一般与函数式融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming,简称 FRP)
2. RxSwift 的基本介绍
image.png
// 本次 RxSwift 版本环境
RxSwift (5.0.0)
RxCocoa (5.0.0)
3. RxSwift 的三个核心概念是什么?分别做什么?
  • Observable:负责发送事件(Event)
  • Observer:负责订阅 Observable,监听 Observable 发送的事件(Event)
  • Event:负责 ObservableObserver 的沟通,有三种状态 next、error、completed
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)
  • 其实 Binder 就是能让我们拿到操作对象(UILabel)的 Observer
10. 传统的状态监听方式有哪些(五种)?有什么弊端?(重要)
  • 在开发中经常要对各种状态进行监听,传统的常见监听方案有:
  • KVO
  • Target-Action
  • Notification
  • Delegate
  • Block Callback
  • 弊端:传统方案经常会出现错综复杂的依赖关系、耦合性比较高,还需要编写重复的非业务代码
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

相关文章

  • Swift Day 22 响应式编程(Reactive Prog

    1. 什么是响应式编程?比较著名的两个框架是哪两个? 响应式编程(Reactive Programming,简称 ...

  • RxSwift 核心逻辑初探

    RxSwift RxSwift: Reactive Extensions Swift,函数响应式编程的基础框架。简...

  • Swift5.0 - day13 - 响应式编程

    一、响应式编程 1.1、响应式编程(Reactive Programming,简称RP)响应式编程是一种编程范式,...

  • ReactiveCocoa的使用

    ReactiveCocoa 是GitHub上一个开源的函数响应式(Functional Reactive Prog...

  • RxJava 的使用与理解(一)

    ReactiveX编程简称Rx编程,又叫响应式编程、响应式扩展,英文为Reactive Extensions。可以...

  • 前端随笔

    响应式编程 响应式编程【Reactive Programming】依赖事件? 回调?在响应式编程里,按时间排列的事...

  • RxJava 使用篇

    一、什么是RxJava Rx = Reactive Extension Reactive 响应响应式编程基于观察者...

  • 二十二、响应式编程

    响应式编程 响应式编程(Reactive Programming,简称RP),也是一种编程范式,于1997年提出,...

  • [Swift5.1] 28-响应式编程

    响应式编程 响应式编程(Reactive Programming,简称RP) 也是一种编程范式,于1997年提出,...

  • 26-Swift 响应式编程

    1.响应式编程 响应式编程(Reactive Programming,简称RP), 也是一种编程范式,于1997年...

网友评论

    本文标题:Swift Day 22 响应式编程(Reactive Prog

    本文链接:https://www.haomeiwen.com/subject/mkqanktx.html