Swift vs Objcective-C协议

Hon*_*ney 1 protocols objective-c swift

来自Objective-C背景,其中每个协议必须始终具有委托属性.在Swift中似乎并非如此,它打破了我对协议的范式.

Swift中的AFAIK,协议用于两个主要目的:委托模式(需要像Objective-C这样的委托)以及组合模式(在Objective-C中不存在并且不需要委托属性)与扩展使其比Objective-C中的传统继承模式更有效.

我理解正确吗?你能澄清一下吗?

编辑:

我所看到的不同之处在于:来自Apple的WWDC

传统方式是(Slide76):

class Ordered {
 func precedes(other: Ordered) -> Bool { fatalError("implement me!") }
}
class Number : Ordered {
 var value: Double = 0
 override func precedes(other: Ordered) -> Bool {
 return self.value < (other as! Number).value
 }
} 
Run Code Online (Sandbox Code Playgroud)

新的Swift方式是(幻灯片90):

protocol Ordered {
 func precedes(other: Self) -> Bool
}
struct Number : Ordered {
 var value: Double = 0
 func precedes(other: Number) -> Bool {
 return self.value < other.value
 }
}
Run Code Online (Sandbox Code Playgroud)

而且我从来没有在Objective-C中看到像这样使用的协议.那他们有什么不同?

mat*_*att 8

在Objective-C和Swift中,协议都有一个目的:允许任意或不相关的类型保证具有某些成员(或者,在可选成员的情况下,至少可能具有这些成员).特别是,这种保证对编译器很重要.基本上,然后,协议是一种伪类型的该覆盖的实数型结构和联合它以新的方式(代替,就是说,"混入"通过一些其它语言用于同样的目的;红宝石,例如不需要协议,因为它有模块).

例如,Bird和Insect可能是不相关的类,甚至(在Swift中)根本不是类,但如果它们都采用需要fly()方法的Flier协议,则编译器知道它们都可以飞行,并且允许fly()要发送给Bird或Insect的消息.

协议可以用于各种常见和重要的体系结构模式(例如委派)这一事实纯粹是次要但非常自然的协议性质的后果.

  • 基本上协议是一种协议.Swift协议以Objective-C协议为模型.但它们更强大,因为你可以拥有协议扩展,并且因为它们可以被结构和枚举采用,而这些结构和枚举没有其他方式来表达层次结构. (3认同)