首页 > 解决方案 > 如何使用组合框架 NSObject.KeyValueObservingPublisher?

问题描述

我正在尝试使用组合框架 NSObject.KeyValueObservingPublisher。publisher(for:options:)我可以通过调用NSObject来了解如何生成此发布者。但我有两个问题:

在我看来,这些限制使这个发布者几乎无法使用,除非在最简单的情况下。有什么解决方法吗?

标签: ioscombine

解决方案


我没有太多要添加到 TylerTheCompiler 的答案,但我想注意几点:

  1. 根据我的测试,NSObject.KeyValueObservingPublisher内部不使用更改字典。它总是使用键路径来获取属性的值。

  2. 如果您通过.prior,则发布者将在每次属性更改时分别发布之前和之后的值。

  3. 获取属性之前和之后值的更短的方法是使用scan运算符:

    extension Publisher {
        func withPriorValue() -> AnyPublisher<(prior: Output?, new: Output), Failure> {
            return self
                .scan((prior: Output?.none, new: Output?.none)) { (prior: $0.new, new: $1) }
                .map { (prior: $0.0, new: $0.1!) }
                .eraseToAnyPublisher()
        }
    }
    

    如果您还使用.initial,那么 的第一个输出withPriorValue将是(prior: nil, new: currentValue)


推荐阅读