美文网首页
Combine -- 响应式和指令式的桥梁

Combine -- 响应式和指令式的桥梁

作者: jancywen | 来源:发表于2021-02-23 10:18 被阅读0次

Apple 平台的开发,包括系统级别的 API 和大多数的第三方框架,也都是按照指令式编程的方式来编写的。想要在 Combine 的响应式框架中使用这些指令式的 API,我们需要一些手段来把这些命令转换为合适的 Publisher。

Future

如果订阅和值的发布是同步过程,我们可以直接用Just 将某个值 “包装” 成一个 Publisher 来提供给各类 Publisher 的合并操作
如果我们希望订阅操作和值的发布是异步行为,不在同一时间发生的话,可以使用 Future。Future 提供了一种方式,可以让我们创建一个接受未来的事件的 Publisher。

struct SampleModel {
    var id: Int?
}

func sampleRequestAction(handler: @escaping(SampleModel?, Error?) -> Void) {
    print("模拟延时")
    DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
        print("延时结束返回")
        handler(SampleModel(id: 5), nil)
    }
}

Future<SampleModel, Error> { promise in
    sampleRequestAction { (model, err) in
        print("promise")
        if let model = model {
            promise(.success(model))
        }else {
            promise(.failure(err!))
        }
    }
}
.subscribe(on: RunLoop.main)
.sink { (complete) in
    print("complete")
    if case .failure(let msg) = complete {
        print(msg)
    }
} receiveValue: { (model) in
    print("receiveValue:")
    print(model.id)
}

// 模拟延时
// 延时结束返回
// promise
// receiveValue:
// Optional(5)
// complete

Future 只能为我们提供一次性 Publisher:对于提供的 promise,你只有两种选择:发送一个值并让 Publisher 正常结束,或者发送一个错误。因此,Future 只适用于那些必然会产生事件结果,且至多只会产生一个结果的场景。比如刚才看到的网络请求:它要么成功并返回数据及响应,要么直接失败并给出URLError。

subject

对于可重复的多次发生的事件,可以使用 subject

let subject = PassthroughSubject<(), Never>()
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
    subject.send()
}

相关文章

  • Combine -- 响应式和指令式的桥梁

    Apple 平台的开发,包括系统级别的 API 和大多数的第三方框架,也都是按照指令式编程的方式来编写的。想要在 ...

  • Combine 基础知识

    摘自《SwiftUI和Combine编程》---《Combine异步编程》 响应式异步编程模型 将“状态变化”看作...

  • SwiftUI 与 Combine(简介)

    SwiftUI 与 Combine(简介)什么是SwiftUI?什么是Combine?响应式编程:异步编程:何时可...

  • 2021-01-29

    Combine之Subjects 在响应式编程的世界中,Subject不太好翻译。在Combine中,存在两个Su...

  • RxAndroid 来管理应用状态(1)

    指令式编程现在总是被拿出来和其他OOP呀 、FP还是响应式编程进行对比以突出后者的优势。不过指令式编程还是比较好理...

  • angular表单的使用实例

    大纲 1、模板驱动表单的创建2、响应式表单的创建3、模板驱动型表单的自定义指令4、响应式表单的自定义指令5、父组件...

  • Vue指令之v-show

    Vue指令之v-show v-show 指令根据表达式的真假来显示元素和隐藏,是响应式的v-show 指令通过改变...

  • 动脑学院Rxjava预习资料 RxJava2 响应式编程介绍

    RxJava2 响应式编程介绍 响应式编程&RxJava基本概念响应式宣言响应式扩展响应式流规范 RxJava 基...

  • VUE响应式原理

    VUE响应式原理 这里的响应式(Reactive)不同于CSS布局的响应式(Responsive), 这里的响应式...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

网友评论

      本文标题:Combine -- 响应式和指令式的桥梁

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