来自 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
的后代,如Ferrari
、Toyota
、BMW
等,都对这个基类做了极小的修改.
这样做的结果是减少了代码重用。我的 BoomBox
也可以播放音乐,但它不是汽车。从 Car
继承音乐播放功能是不可能的。
相反,Swift 鼓励将这些大型整体类分解为更小组件的组合。然后可以更轻松地重用这些组件。 Car
和 BoomBox
都可以使用 MusicPlayer
。
Swift 提供了多种功能来实现这一点,但迄今为止最重要的是协议(protocol)扩展。它们允许协议(protocol)的实现与其实现类分开存在,因此许多类可以简单地实现该协议(protocol)并立即获得其功能。
关于objective-c - Swift 中的面向协议(protocol)编程是什么?它带来了什么附加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37530346/