【问题标题】:Modify Object in Array with Swift?用 Swift 修改数组中的对象?
【发布时间】:2015-04-11 18:58:31
【问题描述】:

我有数组:

var arrDicContact = udContact.valueForKey("arrDicContact") as [NSDictionary]

我想更改数组中的一个联系人:

 for let dicx:NSDictionary in arrDicContact{
     if (dic.valueForKey("name") as String) == selectedName{
        //how to modify dic to newdic: dic = newdic
     }
 }

我可以使用 int i 从 0 到 arrDicContact.count-1 的 for 循环。但它没有退出......我喜欢for循环(for......in......)所以任何人都可以帮助我! :) 非常感谢。

【问题讨论】:

  • 你不应该在迭代集合/数组/列表时修改它

标签: arrays swift for-loop nsdictionary


【解决方案1】:

假设我们有这样的数组:

var array:[NSDictionary] = [["name":"foo"],["name":"bar"],["name":"baz"]]

使用enumerate

for (idx, dic) in enumerate(array) {
    if (dic["name"] as? String) == "bar" {
        array[idx] = ["name": "newBar"]
    }
}

迭代indices:

for idx in indices(array) {
    if (array[idx]["name"] as? String) == "bar" {
        array[idx] = ["name": "newBar"]
    }
}

更积极地,使用map 替换整个array

array = array.map { dic in
    if (dic["name"] as? String) == "bar" {
        return ["name": "newBar"]
    }
    return dic
}

【讨论】:

  • 我投票支持这个答案;只是一个 Swift 2.0 更新 - 使用如下枚举:for (idx, dic) in array.enumerate() {....
  • 如果我们有带结构的数组应该怎么做?
【解决方案2】:

您需要改用NSMutableDictionary,因为您无法编辑NSDictionary

那么你还有一个错字。在您的 if 子句中,您使用 dic,但您需要 dicx

解决这个问题后,在你的 if 子句中你可以这样做:

if (dicx.valueForKey("name") as String) == selectedName{
  dicx.setValue(value: yourObject, forKey: yourKey)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2021-04-30
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多