我是swift的新手并尝试设置一个10x10的Bools二维阵列,其中三分之一是真的,其余的都是假的。由于某些原因,这不会运行,而是给我一个冗长的错误,原因是:EXC_BAD_INSTRUCTION。有人可以帮我弄清楚我做错了什么。谢谢!
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
}
}
}
答案 0 :(得分:2)
你得到致命错误:索引超出范围,因为你无法在Swift中索引到一个空数组(因为即使数组索引0
也不存在尚未)。
一种解决方案是使用嵌套数组初始值设定项初始化二维数组。如果您将其初始化为所有false
,那么您只需设置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
}
}
}
答案 1 :(得分:1)
看起来您正在将'before'对象初始化为数组,但随后将其指定为字典。 (以及你如何分配它看起来像是可以做一个调整。
[Bool] = Bools数组 [[Bool]] = Bool数组的数组
要分配到上面你需要用你的结果创建一个[Bool]数组,并将它附加到上面的对象。
由于您似乎想将之前用作词典,因此您只需将初始化程序更改为:
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]
}
}
}
然后您将成功使用
调用值//To call before[1][3]
if let before = before[1] {
print(before[3])
}
如果我错了并且您希望它作为Bool数组的数组工作,那么您需要更改将结果添加到'before'数组的方式:
var before = [[Bool]]()
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])