iOS Swift 字典克隆

iOS Swift Dictionary Cloning

我复制了一个 NSMutableDictionary。制作副本后,我想独立更改每个字典中的值。但是,当我更改一个时,其他所有更改。这几乎就像副本只是指向原始文件的指针。我设置它们的代码是:

var nf = text?.toInt()!
var creatureInfo = NSMutableDictionary()
for var c = 0;c<nf;c++ {
    creatureInfo = NSMutableDictionary()
    creatureInfo = getCreature(name)
    creatureInfo.setValue("creature", forKey: "combat-type")
    combatants.append(creatureInfo)
}

我想在循环中执行 creatureInfo = NSMutableDictionary() 会起作用,但它没有。

NSMutableDictionary 是 Cocoa 遗留的引用类型(它是 class,而不是 struct)。如果副本看起来只是指向原始文件的指针,那是因为它们:getCreature 很可能总是 returns 相同的实例。

使用Swift Dictionary 类型获取被视为值类型的字典。您可以使用语法 [KeyType: ValueType].

声明一个
var creatureInfo: [String: String] = getCreature(name) as! [String: String]
creatureInfo["combat-type"] = "creature"
combatants.append(creatureInfo)

我相信@zneak 的回答是可行的方法。如果您必须坚持使用NSMutableDictionary,那么这应该有效:

var creatureInfo = getCreature(name).mutableCopy() as! NSMutableDictionary
creatureInfo["combat-type"] = "creature"
combatants.append(creatureInfo)