Swiftui 我们如何强制ForEach使用UUID而不是(id:\.self)?

Swiftui 我们如何强制ForEach使用UUID而不是(id:\.self)?,swiftui,Swiftui,我有一个向下的代码,它在ForEach循环中生成一些文本,这个循环使用Int(id:.self),但在这种情况下,我们生成的(id=UUID())将被忽略!ForEach可以处理一些内部整数!我们如何强制ForEach将我们构建的UUID作为id struct Data: Identifiable { let id = UUID() var name: String } let Data1 = Data(name: "Data 1") let Da

我有一个向下的代码,它在ForEach循环中生成一些文本,这个循环使用Int(id:.self),但在这种情况下,我们生成的(id=UUID())将被忽略!ForEach可以处理一些内部整数!我们如何强制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()
            
            
        }
    }
}
你可以试试这个:

ForEach(dataModel.items.map{ $0.id }, id: \.self) { uuid in // ← Here: I want UUID

您可以使用中提到的
zip

ForEach(数组(zip(dataModel.items.index,dataModel.items)),id:\.1){index,item in
//在这里使用索引和项都是安全的
}

您可以这样做:
ForEach(dataModel.items){item in…}
因为每个项目都符合
可识别的
。另外,不相关,但我建议不要将其命名为
数据
,因为在Foundationabout naming you right中已经定义了这种类型,这些代码只是简单的示例!但是关于“ForEach(dataModel.items){item in…}”,我知道,但我不能用这种方式,因为我需要在我的真实代码中读取索引,这不起作用,而且您已经将索引更改为uuid!我的代码需要索引!我明白了,所以当你说← 这里:我想知道你的意思是← 这里:我要索引。非常混乱。谢谢,我查看了链接,它对我来说有点高,我不明白为什么\.1?
zip
返回元组对序列。您可以使用
.1
访问元组对中的第二个元素,在本例中,该元素就是项(
数据
)。您可以查找有关Swift元组的信息,以了解有关语法的更多信息。