arrays - Swift - 更新多维 NSMutableDictionary 的值

标签 arrays swift multidimensional-array

在下面的 Playground 示例中,我尝试修改一个 multidimensional 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).

提前致谢!

最佳答案

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

关于arrays - Swift - 更新多维 NSMutableDictionary 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36257240/

相关文章:

php - 如何使用 php 将数组转换为具有特殊键的多维数组?

java - 如何使用类中的方法数组来执行类的方法?

swift - 检查是否同时触及不同的 View

Swift Siesta 访问响应原始数据

ios - 在 swift 4 中的类之间移动数据

python - 将 numpy 2D 数组中的字符串元素转换为数组并生成 3D 数组

c++ - 在结构内部定义时初始化 Boost.MultiArray?

javascript - 使用 golang 在具有多个条件的 mongo 查询中发出问题

ruby - 如何在 ruby​​ 数组中找到匹配值?

arrays - 将大值传递给模块