Swift 致命错误:索引超出范围。。。为什么这段代码不能编译?
我是swift的新手,正在尝试建立一个10x10的2D布尔数组,其中三分之一为真,其余为假。由于某种原因,它不会运行,而是给了我一个很长的错误,原因是:EXC_BAD_指令。有人能帮我找出我做错了什么吗。谢谢Swift 致命错误:索引超出范围。。。为什么这段代码不能编译?,swift,multidimensional-array,fatal-error,conways-game-of-life,Swift,Multidimensional Array,Fatal Error,Conways Game Of Life,我是swift的新手,正在尝试建立一个10x10的2D布尔数组,其中三分之一为真,其余为假。由于某种原因,它不会运行,而是给了我一个很长的错误,原因是:EXC_BAD_指令。有人能帮我找出我做错了什么吗。谢谢 var before = [[Bool]]() for x in 0..<10 { for y in 0..<10 { if arc4random_uniform(3) == 1 { before[x][y] = true } else
var before = [[Bool]]()
for x in 0..<10 {
for y in 0..<10 {
if arc4random_uniform(3) == 1 {
before[x][y] = true
}
else {
before[x][y] = false
}
}
}
var-before=[[Bool]]()
对于0..中的x,看起来您正在将“before”对象初始化为数组,然后将其指定为字典。(另外,您分配它的方式看起来可以通过调整来实现
[Bool]=Bool数组
[[Bool]]=Bool数组的数组
要分配给上面的对象,您需要使用结果创建一个[Bool]数组,并将其附加到上面的对象
因为您似乎想将Prefore用作字典,所以您可以将初始值设定项更改为:
var before = [Int:[Int:Bool]]()
并将您的功能更改为:
for x in 0..<10 {
for y in 0..<10 {
let test = x
if arc4random_uniform(3) == 1 {
before[x] = [y:true]
}
else {
before[x] = [y:false]
}
}
}
如果我错了,并且您希望它作为布尔数组工作,那么您需要将结果添加到“before”数组的方式更改为:
首先生成布尔的“X值”数组
将此布尔数组附加到“before”数组
var-before=[[Bool]]()
对于0中的x..您将得到致命错误:索引超出范围,因为您无法在Swift中索引到空数组(因为即使数组索引0
也不存在)
一种解决方案是使用嵌套数组初始值设定项初始化二维数组。如果将其初始化为allfalse
,则只需设置true
值:
var before = [[Bool]](count: 10, repeatedValue: [Bool](count: 10, repeatedValue: false))
for x in 0..<10 {
for y in 0..<10 {
if arc4random_uniform(3) == 1 {
before[x][y] = true
}
}
}
var-before=[[Bool]](计数:10,repeatedValue:[Bool](计数:10,repeatedValue:false))
对于0中的x..您的数组为空。索引x
中没有任何内容。下面的答案是否回答了您的问题?
for x in 0..<10 {
var yArray = [Bool]()
for y in 0..<10 {
if arc4random_uniform(3) == 1 {
yArray.append(true) // Array of Bools
}
else {
yArray.append(false)
}
}
before.append(yArray)
}
//To call before[1][3]
print(before[1][3])
var before = [[Bool]](count: 10, repeatedValue: [Bool](count: 10, repeatedValue: false))
for x in 0..<10 {
for y in 0..<10 {
if arc4random_uniform(3) == 1 {
before[x][y] = true
}
}
}