我对符合存在变量方面有些困惑。
由于在此处 Animal
总是符合 Hashable
,所以我想象任何 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())