我有一个向下的代码,它在ForEach循环中生成一些Text,这个循环使用(id:.self(,它是Int,但在这种情况下,我们生成的(id=UUID(((将被忽略!ForEach可以处理一些内部Int数!我们如何强制ForEach将我们构建的UUID作为id?
struct Data: Identifiable
{
let id = UUID()
var name: String
}
let Data1 = Data(name: "Data 1")
let Data2 = Data(name: "Data 2")
let Data3 = Data(name: "Data 3")
let Data4 = Data(name: "Data 4")
class DataModel: ObservableObject
{
@Published var items: [Data] = [Data1, Data2, Data3, Data4]
}
struct ContentView: View
{
@StateObject var dataModel = DataModel()
var body: some View
{
ForEach(dataModel.items.indices, id: .self) { index in // ← Here: I want UUID
Text(dataModel.items[index].name)
.font(.title2)
.padding()
}
}
}
您可以使用zip
,如SwiftUI中如何将.enumered((与ForEach一起使用?
ForEach(Array(zip(dataModel.items.indices, dataModel.items)), id: .1) { index, item in
// index and item are both safe to use here
}
你可以试试这个:
ForEach(dataModel.items.map{ $0.id }, id: .self) { uuid in // ← Here: I want UUID