为什么 Observable 对象在 Swift 中在更改发生之前而不是之后通知观察者?

问题描述 投票:0回答:1

新的观察功能带有一个

withObservationTracking(_ apply:onChange:)
,当修改
onChange
闭包中访问的任何属性时,它会执行
apply
闭包。然而,
onChange
闭包是在属性获得新值之前执行的。即使在组合框架中,观察者也会在实际变化之前通过objectWillChange()收到通知。
为什么不在更改后

收到通知,以便我们可以立即访问新值?与设置一个将在下一帧更新所有依赖项的标志相比,这不是会让事情变得更容易吗?

这是一种设计选择,还是有客观原因说明为什么这样做更好?

两个主要原因:
swift observable implementation observer-pattern
1个回答
0
投票

    一致性
  1. :Swift 中的

    willSetdidSet

     属性观察器的工作原理类似,允许您在更改之前和之后进行观察。可观察的对象与这个既定的模式保持一致。

  2. 控制
  3. :在更改之前收到通知使您有机会采取先发制人的操作,例如,资源释放或基于旧值的条件逻辑。

    严格来说这并不是更好或更坏,只是一种设计选择,旨在为开发人员提供更多控制权。如果您更喜欢更改后通知,您可以随时为此设置自己的机制。

© www.soinside.com 2019 - 2024. All rights reserved.