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中看到像这样使用的协议.那他们有什么不同?
在Objective-C和Swift中,协议都有一个目的:允许任意或不相关的类型保证具有某些成员(或者,在可选成员的情况下,至少可能具有这些成员).特别是,这种保证对编译器很重要.基本上,然后,协议是一种伪类型的该覆盖的实数型结构和联合它以新的方式(代替,就是说,"混入"通过一些其它语言用于同样的目的;红宝石,例如不需要协议,因为它有模块).
例如,Bird和Insect可能是不相关的类,甚至(在Swift中)根本不是类,但如果它们都采用需要fly()方法的Flier协议,则编译器知道它们都可以飞行,并且允许fly()要发送给Bird或Insect的消息.
协议可以用于各种常见和重要的体系结构模式(例如委派)这一事实纯粹是次要但非常自然的协议性质的后果.
| 归档时间: |
|
| 查看次数: |
2742 次 |
| 最近记录: |