我的代码中有数组grid
。我想要做的是检查x
,y
let object = grid[x][y]
是否有对象,如果object
不是nil
我编辑它,否则我分配一个新对象反对它grid[x][y] = newObject()
。
if let object = grid[x][y] {
object.property = newValue
} else {
grid[x][y] = newObject()
}
但我在行fatal error: Array index out of range
if let object = grid[x][y] {
最好的方法是什么? 提前谢谢。
答案 0 :(得分:1)
您需要做的事情(正如我在评论中所说)是将数组分配到您想要的大小,并使其成为Object?
而不是Object
的数组(或Object!
- 你为什么这样做?)。像这样的东西,2x2阵列...
var grid = [[Object?]](count:2, repeatedValue: [Object?](count:2, repeatedValue:nil))
答案 1 :(得分:0)
首先,如果您希望修改grid
对象,则无法使用let
进行定义。您必须使用var
。
看起来您正在尝试将可选绑定(if let x = Optional(y) { ... }
)与数组下标(array[x]
)一起使用。这不起作用,因为数组下标不返回可选项。它将返回一个有效的对象或抛出异常。你可以试试这个:
if grid.count > x {
if grid[x].count > y {
object = grid[x][y]
}
}