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)
我复制了一个 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)