如何从数组的数组中获取值
How to get value from array of arrays
我的代码中有数组数组 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()
}
但我在 if let object = grid[x][y] {
行中得到 fatal error: Array index out of range
最好的方法是什么?
提前致谢。
首先,如果你想修改你的 grid
对象,你不能用 let
定义它。您必须使用 var
.
您似乎在尝试将可选绑定 (if let x = Optional(y) { ... }
) 与数组下标 (array[x]
) 结合使用。这是行不通的,因为数组下标不是 return 可选的。它会 return 一个有效的对象或抛出异常。你可以试试这个:
if grid.count > x {
if grid[x].count > y {
object = grid[x][y]
}
}
你需要做的(正如我在评论中所说的那样)是将数组分配到你想要的大小,并使其成为 Object?
而不是 Object
的数组(或 Object!
- 你为什么这样做?)。像这样,对于 2x2 数组 ...
var grid = [[Object?]](count:2, repeatedValue: [Object?](count:2, repeatedValue:nil))
我的代码中有数组数组 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()
}
但我在 if let object = grid[x][y] {
fatal error: Array index out of range
最好的方法是什么? 提前致谢。
首先,如果你想修改你的 grid
对象,你不能用 let
定义它。您必须使用 var
.
您似乎在尝试将可选绑定 (if let x = Optional(y) { ... }
) 与数组下标 (array[x]
) 结合使用。这是行不通的,因为数组下标不是 return 可选的。它会 return 一个有效的对象或抛出异常。你可以试试这个:
if grid.count > x {
if grid[x].count > y {
object = grid[x][y]
}
}
你需要做的(正如我在评论中所说的那样)是将数组分配到你想要的大小,并使其成为 Object?
而不是 Object
的数组(或 Object!
- 你为什么这样做?)。像这样,对于 2x2 数组 ...
var grid = [[Object?]](count:2, repeatedValue: [Object?](count:2, repeatedValue:nil))