更改 Swift 中数组中字典的值 2

Change value of dictionary within array in Swift 2

我正在尝试更改数组中字典的值。我在PlayGround做了一个小原型:

var arr = [NSDictionary]()
arr.append(["name":"blue","view":"<object id=\"6787\">","visible":"true","locked":"false"])
arr.append(["name":"yellow","view":"<object id=\"345\">","visible":"true","locked":"false"])
arr.append(["name":"green","view":"<object id=\"123\">","visible":"false","locked":"true"])

//test remove
arr.removeAtIndex(2)

arr.count

//test edit
let nameChange = arr[1]
nameChange.setValue("black", forKey: "name")

arr[1]

但是出现错误,无法解决:

有人可以帮我吗?

因为您将字典创建为 NSDictionary - 值一旦设置就无法更改。但是您仍然想使用 setValue() 更改它们,这就是您出现错误的原因。修复很简单,将其更改为 NSMutableDictionary但是。当你有 Swift API 时,你不应该使用 Objective-C API。这就是为什么您应该使用 Swift 的 Dictionary。如何?例如

var arr = [[String:String]]()
arr.append(["name":"blue","view":"<object id=\"6787\">","visible":"true","locked":"false"])
arr.append(["name":"yellow","view":"<object id=\"345\">","visible":"true","locked":"false"])
arr.append(["name":"green","view":"<object id=\"123\">","visible":"false","locked":"true"])

//test remove
arr.removeAtIndex(2)

arr.count

//test edit
var nameChange = arr[1]
nameChange["name"] = "black"

终于得到了一些代码,

let DuplicateArray: NSArray = array
let DuplicateMutableArray: NSMutableArray = []
DuplicateMutableArray.addObjectsFromArray(DuplicateArray as [AnyObject])
var dic = (DuplicateMutableArray[0] as! [NSObject : AnyObject])
dic["is_married"] = "false"
DuplicateMutableArray[self.SelectedIndexPath] = dic
array = []
array = (DuplicateMutableArray.copy() as? NSArray)!

//输出会像

array =  [
  {
    "name": "Kavin",
    "Age": 25,
    "is_married": "false"
  },
  {
    "name": "Kumar",
    "Age": 25,
    "is_married": "false"
  }

]