[英]Swift: "Type 'any Hashable' cannot conform to 'Hashable'"
我對在新的 Xcode 測試版中看到的圍繞 Swift 中的新any
語法的錯誤感到有些困惑。
我有一個采用any Hashable
的視圖,我試圖將其傳遞給采用Hashable
參數的參數。 但是,我從 Xcode 收到此錯誤: Type 'any Hashable' cannot conform to 'Hashable'
。 我不明白為什么會這樣,因為我認為any Hashable
本質上是類型擦除的 Hashable,對吧?
這是一個完整的代碼示例來說明我正在嘗試的內容:
struct AwesomeNavigationLink: View {
var itemToLinkTo: any Hashable
var label: String
var body: some View {
NavigationLink(value: itemToLinkTo) {
Text(label)
}
}
}
這會導致 NavigationLink 行出現上述錯誤。
我的問題是:我應該能夠將any Hashable
傳遞給Hashable
嗎? 如果是這樣,如何,或者這是一個錯誤? 如果不是,為什么? 提前致謝!
struct AwesomeNavigationLink<P>: View where P : Hashable, P : Codable, P : Decodable {
var itemToLinkTo: P
var label: String
var body: some View {
NavigationLink(value: itemToLinkTo) {
Text(label)
}
}
}
也許@technerd的這個答案幫助
Hashable 包含 self 而 AnyHashable 不包含
在協議中包含 Self 有點像帶有泛型參數的協議,而泛型參數始終是符合標准的類。 這會導致協議無法像 Set 一樣單獨使用,因為“通用參數”是未知的。 AnyHashable 通過完全不使用 Self 解決了這個問題,因此它現在變成了一個普通的結構。 它“擦除”了通用的 Self 類型。
你可以在這里閱讀完整的評論Any, Hashable, AnyHashable 之間的區別
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.