Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 比较可选Bool变量不';行不通_Arrays_Swift_Boolean_Optional - Fatal编程技术网

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]
得到的值不是布尔值。谢谢你,现在代码正在运行。如果我能回报你,请告诉我;)