iOS Swift:闭包(回调)与委托,何时使用哪种?

29

个人而言,对于简单的逻辑关联,我更喜欢在Swift中使用回调(callback)而不是委托(delegate),因为这种方式非常直接明了,易于理解。但同时也有一些人更喜欢使用委托,因为委托是其他语言(如C#)中流行的模式。

以下是我在网上找到的一些讨论:

1. "为什么你不应该在Swift中使用委托?" https://medium.cobeisfresh.com/why-you-shouldn-t-use-delegates-in-swift-7ef808a7f16b#.hqb7zrc1v

2. Apple正在更多地将重点放在回调模式上 https://www.reddit.com/r/swift/comments/2ces1q/closures_vs_delegates/

3. 块或委托? http://blog.stablekernel.com/blocks-or-delegates/

阅读了这些讨论之后,我仍然无法确定偏好。我想知道什么情况下最好使用闭包(closures),什么情况下最好使用委托(delegate)?原因是什么?

谢谢!


@rmaddy 感谢您的反馈。我会更新问题,使其更具体。实际上,这与以下问题的性质相同:https://dev59.com/fV4c5IYBdhLWcg3wn7mj - RainCast
使用委托有一个重要的好处 - 它们使类之间的连接更加明显。当我们使用委托时,我们可以在类描述级别上看到连接。当我们使用操作时,我们可以在方法/属性级别上看到连接。从软件设计分析的角度来看,通过类级别看到连接对于软件设计分析更有益。从这个角度来看,它关乎耦合清晰度。 - Rostyslav Druzhchenko
1个回答

50

这是一个基于观点的问题,问题不应该是哪个更好,而是在解决我试图解决的问题方面什么是最佳解决方案。

我的简单规则:如果某个东西需要一个函数作为它的接口,回调通常是一个很好的解决方案。如果需要多个函数,特别是当它们是对象基本功能所需时,委托可能是更好的解决方案。

始终都取决于具体情况,但绝对陈述很少在实际使用中奏效。


我认为这是一个很好的观点。谢谢! - RainCast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接