传递给swift中所有函数的参数都是只读的(本质上是不可变的),除非参数标记为inout。所以当你使用
我正在努力更新Structs创建的数组中的单个变量。
struct CurrentPolicyItems {
var id:Int
var currentInsured:String
var currentPremium:String
var currentXDate:String
var typeID:Int
var productID:Int
var buildingID:Int
var noteID:Int
var isUsed:Int
var isTemp:Int
}
struct CurrentPolicyTemp {
static var array = [CurrentPolicyItems]()
}
当我关闭一个类时,我需要更改所有的var"isTemp";从1到0。并不是所有的元素都被使用了,所以我需要在任何更新之前对它们进行过滤。我相信我已经很接近了,只是无法得到最后一点。
我试过:
if let items = CurrentPolicyTemp.array.firstIndex( where: { $0.isTemp == 1}) {
CurrentPolicyTemp.array[items].isTemp = 0
}
然而,众所周知,这只会更新单个元素。我试过.filter,但遇到了"的错误;项是不可变的";错误
请帮忙。
我建议使用带有where
子句的for
循环作为过滤器
for (index, element) in CurrentPolicyTemp.array.enumerated() where element.isTemp == 1 {
CurrentPolicyTemp.array[index].isTemp = 0
}
数组。firstIndex
遍历一个循环以获得符合以下条件的FIRST索引。你只需退一步,自己做。。。
for (index, item) in CurrentPolicyTemp.array.enumerated() where item.isTemp == 1 {
CurrentPolicyTemp.array[index].isTemp = 0
}
或者用一个更简单的术语:
for (index, item) in CurrentPolicyTemp.array.enumerated() {
if(item.isTemp == 1) {
CurrentPolicyTemp.array[index].isTemp = 0
}
}
filter
$0在本质上是不可变的,所以你不能简单地将其设置为$0.isTemp = 0
你能做的是
CurrentPolicyTemp.array = CurrentPolicyTemp.array.map({if $0.isTemp == 1 {
var newPolicy = $0
newPolicy.isTemp = 0
return newPolicy
}
return $0 })
我在这里所做的不是尝试对$0
进行变异,而是创建一个新的$0副本并对其进行变异。