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

how to replace a single variable of multi element NSArray in Swift

我正在努力更新由 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]()
}

当我关闭 class 时,我需要将所有 var "isTemp" 从 1 更改为 0。并非所有元素都被使用,因此我需要在任何更新之前过滤它们。我相信我很接近,只是不能得到最后一点。

我试过:

    if let items = CurrentPolicyTemp.array.firstIndex( where: { [=12=].isTemp == 1}) {
    CurrentPolicyTemp.array[items].isTemp = 0
    }

然而,众所周知,这只会更新单个元素。我已经尝试过 .filter,但遇到了“item is immutable”错误。

请帮忙。

传递给 swift 中所有函数的参数是只读的(本质上是不可变的),除非参数被标记为 inout。所以当你使用 filter $0 本质上是不可变的,所以你不能简单地将它设置为 [=12=].isTemp = 0

你能做的是

        CurrentPolicyTemp.array = CurrentPolicyTemp.array.map({if [=10=].isTemp == 1 {
            var newPolicy = [=10=]
            newPolicy.isTemp = 0
            return newPolicy
        }
        return [=10=] })

我在这里做的不是尝试改变 [=13=] 我创建了 $0 的新副本并改变它。

我推荐使用 for 循环,其中包含 where 子句作为过滤器

for (index, element) in CurrentPolicyTemp.array.enumerated() where element.isTemp == 1 {
    CurrentPolicyTemp.array[index].isTemp = 0
}

Array.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
    }
}