如何在Swift中替换多元素NSArray的单个变量



我正在努力更新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
}
}
传递给swift中所有函数的参数都是只读的(本质上是不可变的),除非参数标记为inout。所以当你使用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副本并对其进行变异。

最新更新