我正在尝试在 SwiftUI 的
TabView
中使用几个符合自定义协议的对象。问题是,当我编写下面的代码时,我在 TabView
: 上收到此错误
Type 'any Target' cannot conform to 'Hashable'
如何解决这个问题?我的代码如下:
protocol Target {
var id: Int { get }
var name: String { get }
}
struct Target1: Target {
var id: Int = 1
var name: String = "Target1"
}
struct Target2: Target {
var id: Int = 2
var name: String = "Target2"
}
struct Target3: Target {
var id: Int = 3
var name: String = "Target3"
}
struct ContentView: View {
let targets: [any Target] = [Target1(), Target2(), Target3()]
@State private var selectedTarget: any Target = Target1()
var body: some View {
NavigationStack {
TabView(selection: $selectedTarget) { // This is where the error occurs.
ForEach(targets, id: \.id) { target in
Text(target.name)
}
}
.tabViewStyle(.page(indexDisplayMode: .always))
}
}
}
如果将
selectedTarget
的类型更改为 Target.id
的类型(换句话说,更改为 Int
),它就会起作用:
@State private var selectedTarget: Int = 1