Je dois créer un 2D Array de type facultatif Bool et comparer la valeur qu'il contient, mais je ne peux pas. La première fois que j'essaye de déclarer de cette manière:

var Answ = [[Bool?]] ()
var Page = 0 

for i in 0...4
{
    if Answ[Page][i] ==  true
    {...}

    else if Answ[Page][I] == false
    {...}

    else
    {...}

}
...

Mais quand je lance le programme, il dit:

index hors limites

Quand Xcode compare le Answ[Page][i] avec la valeur true.

Donc, j'essaye de modifier le code et de déclarer le tableau de cette manière:

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
    {...}

}
...

Mais au même moment, (if Answ[Page][i] == true) renvoie cette erreur:

L'opérateur binaire '==' ne peut pas être appliqué aux opérandes de type 'Bool? .Type' (aka 'optional.Type') et 'Bool' "

De plus, dans d'autres points du code où j'essaye de définir une valeur du tableau comme vrai / faux (Answ[Page][2] = true), Xcode dit ceci:

impossible d'affecter une valeur de type 'Bool' au type 'Bool? .Type' (Aka'Optional.Type ')

Quelqu'un peut-il m'aider, s'il vous plaît? Merci d'avance.

J'ai trouvé ce sujet:

Vérification de la valeur d'un booléen facultatif

Mais cela ne m'a pas beaucoup aidé.

0
Fede 15 sept. 2017 à 12:58

2 réponses

Il y a plusieurs problèmes avec votre code. Tout d'abord, n'utilisez pas l'indexation manuelle dans une boucle for, utilisez plutôt for ... in pour que les index soient automatiquement gérés pour vous. Deuxièmement, une meilleure solution pour gérer les booléens facultatifs consiste à dérouler en toute sécurité la valeur à l'aide de la liaison facultative, puis à vérifier la valeur non facultative. Vous n'avez pas non plus besoin d'écrire if bool == true, if bool a la même signification.

Assurez-vous également de vous conformer à la convention de dénomination Swift, qui est inférieure à camelCase pour les noms de variables.

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
    }
}

Si vous souhaitez réellement parcourir l'ensemble des tableaux, voici un moyen sûr de le faire:

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
        }
    }
}
0
Dávid Pásztor 15 sept. 2017 à 10:17

Vous devez fournir une valeur de remplacement avec ??.

Au fait, vous n'avez pas besoin d'écrire == false ou == true, c'est redondant.

if Answ[Page][i] ?? false {
    [...]
}
0
Tamás Sengel 15 sept. 2017 à 10:01