Arrays Swift-更新多维NSMutableDictionary的值

Arrays Swift-更新多维NSMutableDictionary的值,arrays,swift,multidimensional-array,Arrays,Swift,Multidimensional Array,在下面的示例中,我试图修改多维NSMutableDictionary。有人能解释一下修改多维可变字典的正确方法吗 import Cocoa let player = "Player 1" let characterName = "Magic Glop" let strength = 23 let defense = 220 let type = "fire" var example: NSMutableDictionary = ["id":1, "player"

在下面的示例中,我试图修改
多维NSMutableDictionary
。有人能解释一下修改多维可变字典的正确方法吗

import Cocoa

let player = "Player 1"
let characterName = "Magic Glop"
let strength = 23
let defense = 220
let type = "fire"

var example: NSMutableDictionary = ["id":1,
               "player":player,
               "characters":
                    ["character-name":characterName,
                     "stats":
                        ["strength":strength,
                         "defense":defense,
                         "type":type
                        ]
                    ]
                ]

// My first attempt to update character-name.
example["characters"]!["character-name"] = "New Name"
// Error: Cannot assign to immutable expression of type 'AnyObject?!'

// Next I tried updating the value of "characters">"stats">"type" with .setObject
example["characters"]!["stats"]!!.setObject("water", forKey: "type")
// Documentation: .setObject adds a given key-value pair to the dictionary. If the key already exists in the dictionary, the object takes its place.
// Error: Execution was interrupted, reason: EXC_BAD INSTRUCTION (code=EXC_i386_INVOP, suncode=0x0).
提前谢谢

检查这个答案

let player = "Player 1"
        let characterName = "Magic Glop"
        let strength = 23
        let defense = 220
        let type = "fire"

        var example: [String: AnyObject] = ["id":1,
            "player":player,
            "characters":
                ["character-name":characterName,
                    "stats":
                        ["strength":strength,
                            "defense":defense,
                            "type":type
                    ]
            ]
        ]

        print(example)

        var charDic = example["characters"] as! [String: AnyObject]
        charDic["character-name"] = "New Name" // change value for key character-name

        var statsDic = charDic["stats"] as! [String: AnyObject]
        statsDic["type"] = "water" // change the value for type


        charDic["stats"] = statsDic // assign updated dic for key stats

        example["characters"] = charDic // assign updated dic for key chacracters

        print(example)
Class方法:对于不可编辑的参数,您可以将
var
更新为
let

class Player {
  let id: Int
  var name: String
  var characters = [Character]()

  init(id: Int, name: String) {
    self.id = id
    self.name = name
  }

  /**
  Add new char to Player
  */
  func addNewCharacter(new: Character) {
    self.characters.append(new)
  }
}

class Character {
  var name: String
  var strength: Int
  var defense: Int
  var type: String

  init(name: String, strength: Int, defense: Int, type: String) {
    self.name = name
    self.strength = strength
    self.defense = defense
    self.type = type
  }
}

func createPlayer() {
    let player1 = Player(id: 1, name: "Bodrum")

    // create new char and add to the player1 named Bodrum
    let char1 = Character(name: "Magic Glop", strength: 23, defense: 220, type: "fire")
    player1.addNewCharacter(char1)

    print("old name:\(player1.characters[0].name), old type:\(player1.characters[0].type)")

    // update char1's parameters
    player1.characters[0].name = "Yalikavak"
    player1.characters[0].type = "water"

    print("new name:\(player1.characters[0].name), new type:\(player1.characters[0].type)")
  }

// old name:Magic Glop, old type:fire
// new name:Yalikavak, new type:water