繁体   English   中英

Swift 5.7 - 使存在的“任何”协议符合 Hashable

[英]Swift 5.7 - Make existential 'any' protocol conform to Hashable

我在理解一致的存在变量时遇到了一些麻烦。

由于这里的Animal将始终符合Hashable ,我想any Animal必须符合Hashable

但是,我看到的错误让我不这么认为。 有人可以帮助解释为什么会发生这种情况,如果可能的话,帮我解决它?

import SwiftUI
import PlaygroundSupport

protocol Animal: Hashable {
    var name: String { get }
}

struct Cow: Animal {
    let name: String
}

struct Chicken: Animal {
    let name: String
}

let anAnimalList: [any Animal] = [Cow(name: "Aaron"), Chicken(name: "Billy"), Cow(name: "Charlie"), Chicken(name: "Delilah")]

struct myView: View {
    @State private var anAnimal: (any Animal)?
    
    var body: some View {
        VStack {
            List(anAnimalList, id: \.self, selection: $anAnimal) { animal in // ERROR: Type 'any Animal' cannot conform to 'Hashable'
                Text("Animal")
            }
            
            Text("Animal is \(anAnimal?.name ?? "Null")")
        }
    }
}

PlaygroundPage.current.setLiveView(myView())

我发现这个答案解释了发生这种情况的原因以及如何解决它: Scott Thompson 的回答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM