簡體   English   中英

Swift:“類型 'any Hashable' 不能符合 'Hashable'”

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

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