Swift如何初始化元素ID唯一的重复值数组?(SwiftUI场景)
解决Swift数组中元素UUID重复的问题
标准解决方案:使用map生成独立实例
最简洁且符合Swift习惯的方式是利用范围+map,每次迭代创建新的CustomStruct实例,确保每个实例的id都是唯一的:
var myVariable = (0..<30).map { _ in CustomStruct(value: " ") }
这里0..<30指定要创建的元素数量,闭包中每次都会调用CustomStruct的初始化器,生成带有新UUID的独立实例。
为什么原方法会导致ID重复
Array(repeating:count:)的工作逻辑是先创建一个CustomStruct实例,然后将这个实例复制count次放入数组。由于你的id属性是在实例初始化时生成的,复制操作不会重新生成UUID,所以所有元素的id完全相同。
替代方案:自定义Array初始化器(可选)
如果你希望用更贴近Array(repeating:count:)的语法,可以给Array扩展一个自定义初始化器,在内部循环创建实例:
extension Array where Element == CustomStruct { init(repeatingValue value: String, count: Int) { self = (0..<count).map { _ in CustomStruct(value: value) } } } // 使用方式 var myVariable = Array(repeatingValue: " ", count: 30)
这种方式封装了创建逻辑,调用起来更直观,但相比map写法没有本质优势,按需选择即可。
适配SwiftUI的ForEach
用上述方式生成的数组,每个元素的id都是唯一的,直接在ForEach中使用不会出现ID重复的报错:
ForEach(myVariable, id: \.id) { _ in // 视图内容 }
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

