Swift 1.2 - 将可选类型数组中的元素设置为 nil——传入时不允许吗?

Swift 1.2 - Setting element in array of optional types to nil-- not allowed when passed in?

我有一个盒子数组,其中的类型是 Box?允许将元素设置为 nil,如果那里什么都没有的话。我希望盒子在从场景中移除时将其位置设置为零。

以下内容不会引起 Xcode 的投诉:

override func removeFromParent() {
        var board = [[Box?]](count: 5, repeatedValue: [Box?](count: 9, repeatedValue: nil))
        board[i][j] = nil
        super.removeFromParent()
    }

也没有将 board 变量设为全局变量并以这种方式使用它...

在GameScene.swift中:

var board = [[Box?]](count: 5, repeatedValue: [Box?](count: 9, repeatedValue: nil))

在Box.swift中:

override func removeFromParent() {
        board[i][j] = nil
        super.removeFromParent()
    }

但是尝试这样做不会编译(它不再覆盖,因为我添加了一个参数):

func removeFromParent(board: [[Box?]]) {
        board[i][j] = nil
        super.removeFromParent()
    }

有什么方法可以让它工作吗?谢谢

你的问题是 board 在后一种情况下是 let 并且无法更改。

同样,Swift 错误消息在这里具有误导性。

如果你想让它成为一个 inout 参数,那么添加这个像 (inout board:... 但是你需要在调用中使用 & 通过引用传递参数,比如 removeFromParent(&myBoxArray).

PS 刚在 Playground 试过:

var a:[Int] = [1, 2, 3]
func aa(inout a:[Int]) {
  a[1] = 9
}

aa(&a)
a // return [1, 9, 3]