NotificationCenter或关闭?

时间:2017-01-30 20:33:48

标签: swift closures nsnotificationcenter

  

对于主管:在我决定提问之前,我已经搜索了很多   这个问题,但我找不到我想要的东西。

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

  1. 对于简单案例,使用闭包是最简单的解决方案
  2. 当两个对象之间存在复杂的通信时,使用委托很常见。一个代表可能比许多封闭更好。
  3. 当您有多个观察者或不确定要观察的对象时,您必须使用通知。
  4. 您可能会问自己为什么我们在简单案例中使用闭包而不是委托或通知。答案是闭包是最轻量级的。它们易于创建,并且会对代码质量产生积极影响。

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

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