Swift中如何批量修改集合元素属性并生成新集合?
解决方案
因为Member是结构体(值类型),且allMembers是不可变的let集合,你无法直接修改原集合中的元素属性,必须为每个成员创建新的实例来修改post属性,再存入tempSet。以下是两种可行的批量操作方式:
方式一:遍历创建新实例并添加
直接循环allMembers,对每个成员复制所有属性,仅修改post为.satellite,然后添加到tempSet:
for member in allMembers { var newMember = member newMember.post = .satellite tempSet.insert(newMember) }
方式二:用map转换后转成Set
利用map生成包含修改后实例的数组,再直接初始化tempSet,代码更简洁:
tempSet = Set(allMembers.map { member in var newMember = member newMember.post = .satellite return newMember })
关键说明
- 结构体是值类型,每次修改属性都需要生成新实例,原
allMembers中的元素不会被改动(符合不可变集合的设计)。 - 两种方式都支持后续重复批量操作,只需修改
post的赋值即可(比如改成.roxham或.zone34)。
内容的提问来源于stack exchange,提问作者AvsBest
相关产品推荐
相关产品推荐

