簡體   English   中英

使Collection符合自定義協議

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM