objective-c - Swift 中的面向协议(protocol)编程是什么?它带来了什么附加值?

标签 objective-c oop swift2 protocols delegation

来自 Apple 自己的网站:“Swift 设计的核心是两个非常强大的想法:面向协议(protocol)的编程和一流的值语义。”

谁能详细说明什么是面向协议(protocol)的编程,它能带来什么附加值?

我已阅读 this并观看了 Swift 中的面向协议(protocol)编程 video ,但是来自 Objective-C 的背景仍然没有理解它。我恳请您提供一个非常通俗易懂的英语答案,以及有关它与 Objective-C 有何不同的代码片段和技术细节。

只是一个我的困惑是使用<tableViewDelegate, CustomDelegate>我们不能也遵守 Objective-C 中的多个协议(protocol)吗?那么 Swift 又是如何新的呢?


编辑:参见 Protocol-Oriented Views视频。我发现这个视频更基础,更容易掌握有意义的用例。 WWDC 视频本身有点超前,需要更大的广度。此外,这里的答案有些抽象。

最佳答案

前言:POP 和OOP 并不相互排斥。它们是密切相关的设计范例。

POP 优于 OOP 的主要方面是它更喜欢 composition over inheritance .这样做有几个好处。

在大型继承层次结构中,祖先类倾向于包含大部分(通用)功能,而叶子类仅做出最小贡献。这里的问题是祖先类最终会做很多事情。例如,Car 驾驶、存放 cargo 、安置乘客、播放音乐等。这些功能各不相同,但它们都不可分割地集中在 Car 中> 类。 Car的后代,如FerrariToyotaBMW等,都对这个基类做了极小的修改.

这样做的结果是减少了代码重用。我的 BoomBox 也可以播放音乐,但它不是汽车。从 Car 继承音乐播放功能是不可能的。

相反,Swift 鼓励将这些大型整体类分解为更小组件的组合。然后可以更轻松地重用这些组件。 CarBoomBox 都可以使用 MusicPlayer

Swift 提供了多种功能来实现这一点,但迄今为止最重要的是协议(protocol)扩展。它们允许协议(protocol)的实现与其实现类分开存在,因此许多类可以简单地实现该协议(protocol)并立即获得其功能。

关于objective-c - Swift 中的面向协议(protocol)编程是什么?它带来了什么附加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37530346/

相关文章:

ios - UITextField 应该只接受数字值

objective-c - 登录 View Controller 最佳实践

scala - 特征混合与冲突成员 : Why my code can be compiled successfully?

swift - 在通用元类型函数中返回具有特定元类型的对象

ios - Swift - 如何通过方法调用传递类型?

iOS - 单击按钮隐藏状态栏

iphone - 加载包含 sqlite3 数据的表时出现异常

java - 我应该如何处理对象关系映射中对象的删除

perl - perl 类中的多个数据成员

ios - 我向 NSUserDefaults.synchronize() 传递什么参数?