【问题标题】:How to add Combine compatibility to custom classes with older iOS support?如何为具有旧 iOS 支持的自定义类添加组合兼容性?
【发布时间】:2019-10-05 11:55:14
【问题描述】:

我创建了一个框架,我想为我的一些提供商支持 Combine 和 SwiftUI 的早期采用者,而不会放弃之前的 iOS 版本支持。我喜欢声明式风格,并且我经常将可观察的类/结构用于开发人员可以使用的可变状态。如何在不放弃 iOS10+ 支持且不编写两个不同类的情况下添加 Combine 的支持?

我计划将#if canImport(Combine) 扩展添加到此类类中,以便iOS13 用户可以在不编写自定义商店的情况下以本机方式使用它。例如,他们只需致电.sink 或.assign,他们就会收到更新。

我不知道要采用什么协议。我以为那家商店是Publisher,但是Publisher 在发生变化时不能使用.send 方法,我不知道如何通知Subscriber 所以。

public class SomeDataProvider<T> {
    private var didChangeHandler: ((T?) -> Void)?

    public var value: T? {
        didSet {
            didChangeHandler?(value)
        }
    }
    public func didChange(handler: @escaping ((T?) -> Void)) {
        self.didChangeHandler = handler
    }

    public init() {}
}

最好的方法也是至少模拟 .sink(最可用)的 iOS 早期版本,因此我们不会使用两种单独的方法或不同的 iOS 版本。

【问题讨论】:

  • 为什么不采用响应式 swift?无论如何,这就是Combine被盗的东西。

标签: swift combine


【解决方案1】:

这是这个 repo (OpenCombine) 正在处理的东西,你的想法真的很棒,但是 Combine 太复杂而无法构建。该项目处于早期开发阶段,这是因为 Combine 对世界来说是全新的。

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2013-03-12
    相关资源
    最近更新 更多