来自Objective-C背景,每个协议都必须具有委托属性。在Swift中,似乎并非如此,它打破了我对协议的范例。Swift vs Objcective-C协议
AFAIK在Swift中,协议用于两个主要目的:委托模式(它需要像Objective-C这样的委托)以及组合模式(Objective-C中不存在并且不需要委托属性)与扩展相结合,使其比Objective-C中的传统继承模式更有效。
我理解正确吗?你能澄清一下吗?
编辑:
我的意思我看到不同的是: 从苹果公司的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
}
}
新的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
}
}
我从来没有在Objective-C中看到像这样使用协议。那他们有什么不同?
*“......,每一个协议必须始终有一个代表属性” * - 号 –
你有一些非常不正确的假设。在Objective-C中,每个协议都不需要委托属性。 – rmaddy
另外,每个具有一个或多个属性的类都使用组合模式。这与编程语言无关。协议与组合模式无关(任何语言)。 – rmaddy