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]
我有一个盒子数组,其中的类型是 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]