[英]Swift protocol conformance with associated type using same-type constraint
我正在嘗試定義擴展協議A的協議B(后者包含關聯的類型C),同時使用具有相同類型約束的where子句,如編譯器所建議的那樣。 但是,執行此操作時,代碼將不再編譯。 這是一個Swift錯誤(在這種情況下是Swift 4)嗎?
更具體地說,下面的代碼不會編譯錯誤:
類型'E'不符合協議'A'
class D {
}
protocol A: class {
associatedtype C: AnyObject
}
protocol B: A where C == D {
}
class E: B {
}
更改下面指定的協議B的定義將編譯,但將顯示此警告:
從協議“A”覆蓋關聯類型“C”的類型更好地表示為協議上的相同類型約束
protocol B: A {
typealias C = D
}
使其在沒有警告的情況下進行編譯的唯一方法是在E類中指定typealias並在協議B中使用where子句,但這似乎復制了不必要的typealias:
protocol B: A where C == D {
}
class E: B {
typealias C = D
}
我想類協議聲明的類型約束在符合該協議時不會被類讀取。
為了避免類型化的重復,您可以從協議B中刪除相同的類型約束,並使用擴展來為協議B提供類型。
class D {
}
protocol A: class {
associatedtype C
}
protocol B: A {
}
extension B {
typealias C = D
}
class E: B {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.