我必须创建一个可选Array
类型的2D Bool
并比较其中的值,但我不能。
我第一次尝试以这种方式宣布:
var Answ = [[Bool?]] ()
var Page = 0
for i in 0...4
{
if Answ[Page][i] == true
{...}
else if Answ[Page][I] == false
{...}
else
{...}
}
...
但是当我启动该程序时,它说:
指数超出范围
当Xcode将Answ[Page][i]
与值true
进行比较时。
所以,我尝试修改代码并以这种方式声明数组:
var Answ = Array (repeating: Array (repeating: Bool?.self , count: 5), count: 40)
var Page = 0
for i in 0...4
{
if Answ[Page][i] == true
{...}
else if Answ[Page][I] == false
{...}
else
{...}
}
...
但同时,(if Answ[Page][i] == true)
会抛出此错误:
二元运算符'=='不能应用于'Bool?.Type'类型的操作数(又名'optional.Type')和'Bool'“
此外,在我尝试将数组的值设置为true / false(Answ[Page][2] = true
)的代码的其他位置,Xcode说:
无法指定'Bool'类型的值来输入'Bool?.Type'(Aka'Optional.Type')
有人可以帮帮我吗?提前谢谢。
我找到了这个话题:
Checking the value of an Optional Bool
但它对我帮助不大。
答案 0 :(得分:1)
你可以比较您链接到的Q& A中的可选bool。问题是
var Answ = Array (repeating: Array (repeating: Bool?.self , count: 5), count: 40)
创建一个Bool?.self
的(嵌套)数组,它是可选bool的类型,而不是该类型的值。
你想要的是Bool?
值的(嵌套)数组,初始化为nil
:
var answers: [[Bool?]] = Array(repeating: Array(repeating: nil , count: 5), count: 40)
或者:
var answers = Array(repeating: Array(repeating: Bool?.none , count: 5), count: 40)
答案 1 :(得分:0)
您应该使用??
提供后备值。
顺便说一句,您不需要写== false
或== true
,这是多余的。
if Answ[Page][i] ?? false {
[...]
}
答案 2 :(得分:0)
您的代码存在一些问题。首先,不要在for循环中使用手动索引,而是使用for ... in
自动为您处理索引。其次,处理可选布尔值的更好解决方案是使用可选绑定安全地解包值,然后检查非可选值。您也不需要写if bool == true
,if bool
具有相同的含义。
另外请确保符合Swift命名约定,这是变量名称的较低camelCase。
var answ = [[Bool?]] ()
var page = 0
for ans in answ[page]{
if let unwrappedAns = ans {
if unwrappedAns {
// answ[page][i] = true
} else {
}
} else {
//answ[page][i] = ans is nil
}
}
如果你真的想要遍历整个数组,这是一种安全的方法:
for page in answ {
for ans in page {
//here ans = Answ[Page][i] when compared to the code in your question
if let unwrappedAns = ans {
if unwrappedAns {
} else {
}
} else {
//ans is nil
}
}
}