gpt4 book ai didi

ios - 如何使用组合框架 NSObject.KeyValueObservingPublisher?

转载 作者:行者123 更新时间:2023-12-01 09:40:54 25 4
gpt4 key购买 nike

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

  • 我可以包括 .oldoptions ,但没有 .old值(value)永远到来。唯一出现的值是 .initial值(当我们订阅时)和 .new值(每次观察到的属性发生变化时)。我可以压制 .initial值,但我无法抑制 .new值或添加 .old值(value)。
  • 如果 options[.initial, .new] (默认值),我无法区分我收到的值是否为 .initial.new .使用“真实”KVO,我得到一个 NSKeyValueChangeKey 或一个 NSKeyValueObservedChange,它告诉我我得到了什么。但是对于联合出版商,我不知道。我只是得到未标记的值。

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

    最佳答案

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

  • 根据我的测试,NSObject.KeyValueObservingPublisher内部不使用更改字典。它总是使用键路径来获取属性的值。
  • 如果您通过 .prior ,发布者将在每次属性更改时分别发布之前和之后的值。
  • 获取属性前后值的一种更短的方法是使用 scan运算符(operator):
    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) .
  • 关于ios - 如何使用组合框架 NSObject.KeyValueObservingPublisher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60386000/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com