簡體   English   中英

Swift協議與使用相同類型約束的關聯類型一致

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

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