[英]Make Collection conform to custom protocol
我想為所有具有isEmpty
集合類型添加一個通用參數,因此它們也可以具有isNotEmpty
嘗試使Collection
符合Occupiable
出現編譯錯誤
錯誤:協議“集合”的擴展不能有繼承子句
String
也符合Array固有的協議,因此一旦找到上述問題的解決方案,我們是否可以刪除extension String: Occupiable { }
?
// Anything that can hold a value (strings, arrays, etc)
protocol Occupiable {
var isEmpty: Bool { get }
var isNotEmpty: Bool { get }
}
// Give a default implementation of isNotEmpty, so conformance only requires one implementation
extension Occupiable {
var isNotEmpty: Bool {
return !isEmpty
}
}
extension String: Occupiable { }
// error here : Extension of protocol 'Collection'
// cannot have an inheritance clause
extension Collection: Occupiable { }
在這里,您使用isEmpty和isNotEmpty變量創建了Occupiable協議,因此當我們在任何類中實現協議時,都需要聲明這兩個變量以完全填充協議。 但是在這里您已經在Occupiable的擴展程序中聲明了isNotEmpty變量,因此現在在我們實現協議的類中只有一個isEmpty強制性的。 所以在收集協議里面是isEmpty,所以我們需要擴展協議。 但是它在String中工作,因為string是struct。
您需要為Collection編寫如下代碼:
extension Collection where Self : Occupiable {}
您需要設置一致性約束。 這將修復錯誤。
extension Collection where Self: Occupiable { }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.