Arrays 比较可选Bool变量不';行不通
我必须创建一个可选Arrays 比较可选Bool变量不';行不通,arrays,swift,boolean,optional,Arrays,Swift,Boolean,Optional,我必须创建一个可选Bool类型的2D数组,并比较其中的值,但我不能。 我第一次尝试以这种方式声明: var Answ = [[Bool?]] () var Page = 0 for i in 0...4 { if Answ[Page][i] == true {...} else if Answ[Page][I] == false {...} else {...} } ... var Answ = Array (repeating: A
Bool
类型的2D数组
,并比较其中的值,但我不能。
我第一次尝试以这种方式声明:
var Answ = [[Bool?]] ()
var Page = 0
for i in 0...4
{
if Answ[Page][i] == true
{...}
else if Answ[Page][I] == false
{...}
else
{...}
}
...
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
{...}
}
...
但当我启动该计划时,它说:
索引超出范围
当Xcode将Answ[Page][i]
与值true
进行比较时
因此,我尝试通过以下方式修改代码并声明数组:
var Answ = [[Bool?]] ()
var Page = 0
for i in 0...4
{
if Answ[Page][i] == true
{...}
else if Answ[Page][I] == false
{...}
else
{...}
}
...
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
{...}
}
...
但在同一点上,(如果Answ[Page][i]==true)
抛出此错误:
二进制运算符“==”不能应用于“Bool?type”(也称为“optional.type”)和“Bool”类型的操作数
此外,在代码的其他地方,我试图将数组的值设置为true/false(Answ[Page][2]=true
),Xcode说:
无法将“Bool”类型的值分配给“Bool?”类型(也称为“Optional.type”)
有人能帮我吗?先谢谢你
我发现这个话题:
但是这对我没有多大帮助。您应该为
?
提供一个回退值
顺便说一下,您不需要编写==false
或==true
,这是多余的
if Answ[Page][i] ?? false {
[...]
}
您的代码有几个问题。首先,不要在for循环中使用手动索引,而是在中使用
for…自动处理索引。其次,处理可选布尔值的更好解决方案是使用可选绑定安全地展开值,然后检查非可选值。您也不需要如果bool==true
,则不需要写入,如果bool
具有相同的含义,则不需要写入
另外,请确保遵守Swift命名约定,即变量名的小写形式
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
}
}
}
你可以在你链接到的问答中比较可选的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)
变量名应该小写,以防止与类型混淆。在Apple doc之后,你应该比较两个布尔值与==
。也许,[Page][2]
得到的值不是布尔值。谢谢你,现在代码正在运行。如果我能回报你,请告诉我;)