在通用可识别协议上使用 ForEach 的 SwiftUI 会导致 LLDB RPC 服务器崩溃

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

在 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)
                    }
                }
            }
        }
    }
}

根据我收到的错误,这似乎导致编译器本身出现错误。有办法解决这个错误吗?

swift generics swiftui protocols
1个回答
0
投票

我通过不将通用部分设为

id
来解决这个问题。

protocol MyFieldsEntryViewModel<DynamicFieldCode> {
    associatedtype DynamicFieldCode: MyFieldCode
    var id: UUID { get }
    var code: DynamicFieldCode { get }
    var someData: String { get }
}

如果您的类型与

id
一致,那么编译器将不会崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.