來自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