尝试在 SwiftUI 中使用协议和 TabView:“Type 'any <Protocol>' 无法符合 'Hashable'”

问题描述 投票:0回答:1

我正在尝试在 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))
        }
    }
}
swift swiftui swift-protocols swiftui-tabview
1个回答
0
投票

如果将

selectedTarget
的类型更改为
Target.id
的类型(换句话说,更改为
Int
),它就会起作用:

@State private var selectedTarget: Int = 1
© www.soinside.com 2019 - 2024. All rights reserved.