NotificationCenter还是关闭?

3li*_*3li 1 closures nsnotificationcenter swift

对于主管:在决定问这个问题之前,我进行了很多搜索,但没有找到我想要的。

我的问题是:使用NotificationCenter和使用Closures两个实例之间进行通信之间哪个更好?如果它们相似,我应该怎么用?

希望这个例子可以帮助您更好地理解:

如果我们以URLSession课堂为例。为什么大多数方法都有闭包?他们为什么不在其中发送通知Data, Response, and Error

我知道它们之间的区别,我只是不知道在什么情况下应该使用每个。

Sul*_*han 5

在某些情况下,模式可以互换,但是:

  1. 对于简单情况,使用闭包是最简单的解决方案
  2. 当两个对象之间存在复杂的通信时,通常使用委托。一个委托可以比许多关闭更好。
  3. 当您有多个观察者或不确定要观察的对象时,必须使用通知。

您可能会问自己,为什么我们在简单情况下使用闭包,而不是委托或通知。答案是闭包是最轻量的。它们易于创建,并且对您的代码质量产生积极影响。

让我们考虑一个完成回调。如果决定使用通知,则需要另一种方法来处理该通知。对代表同样有效。如果需要一些上下文(例如,触发操作的参数),则需要将其保存到属性中。

另一方面,可以内联创建闭包。这意味着触发该动作并处理其结果的代码在一个地方。这确实简化了代码的结构。还要注意,如果闭包需要某些上下文,则可以捕获它,而无需创建其他属性。