在 Xcode 16.0 中,我创建了一个协议(通常代表枚举),并在另一个
Identifiable
协议中将其用作 id
。当我在 ForEach
循环中使用它时,我收到一条错误消息,指出“LLDB RPC 服务器已崩溃。”
在操场上我有这个代码:
protocol MyFieldCode: Hashable {
var title: String { get }
}
protocol MyFieldsEntryViewModel<DynamicFieldCode>: Identifiable {
associatedtype DynamicFieldCode: MyFieldCode
var id: DynamicFieldCode { get }
var someData: String { get }
}
struct ContentView<Code: MyFieldCode>: View {
let fieldEntries: [any MyFieldsEntryViewModel<Code>] = []
var body: some View {
VStack {
List {
Section {
ForEach(fieldEntries, id: \.id) { entry in
Text(entry.someData)
}
}
}
}
}
}
根据我收到的错误,这似乎导致编译器本身出现错误。有办法解决这个错误吗?
我通过不将通用部分设为
id
来解决这个问题。
protocol MyFieldsEntryViewModel<DynamicFieldCode> {
associatedtype DynamicFieldCode: MyFieldCode
var id: UUID { get }
var code: DynamicFieldCode { get }
var someData: String { get }
}
如果您的类型与
id
一致,那么编译器将不会崩溃。