web-dev-qa-db-fra.com

Swift Optionals - La liaison de variable dans une condition nécessite un initialiseur

Je suis nouveau à Swift et j'essaie de comprendre le concept facultatif. J'ai un petit morceau de code dans Playground qui me donne l'erreur "La liaison variable dans une condition nécessite un initialiseur". Quelqu'un peut-il s'il vous plaît expliquer pourquoi et comment puis-je résoudre ce problème?

Je veux seulement imprimer "Oui" ou "Non" selon que "score1" a une valeur ou non. Voici le code:

import Cocoa

class Person {
    var score1: Int? = 9

    func sum() {
        if let score1 {
            print("yes")
        } else {
            print("No")
        }
    }//end sum
 }// end person

 var objperson = person()
 objperson.sum()
14
Harry

L'instruction if let prend une variable facultative. S'il est nul, le bloc else ou rien n'est exécuté. Si elle a une valeur, la valeur est affectée à une variable différente en tant que type non facultatif.

Ainsi, le code suivant afficherait la valeur de score1 ou "Non" s'il n'y en a pas:

if let score1Unwrapped = score1
{
    print(score1Unwrapped)

}

else
{
    print("No")
}

Une version plus courte du même serait:

print(score1 ?? "No")

Dans votre cas, où vous n'utilisez pas réellement la valeur stockée dans la variable facultative, vous pouvez également vérifier si la valeur est nulle:

if score1 != nil {
...
}
12
LorenzSchaef

L'écriture

if let score1 {

n'a pas de sens. Si vous voulez voir si score a une valeur, utilisez

if score1 != nil {

ou

if let score = score1 {

La dernière observation lie une nouvelle constante non facultative score à score1. Cela vous permet d'utiliser score à l'intérieur de l'instruction if.

5
Aderstedt

le problème est que if let suppose que vous voulez créer une constante score1 avec une certaine valeur. Si vous voulez juste vérifier si elle contient une valeur, comme dans not nil, vous devriez le faire comme ci-dessous:

if score1! != nil {
     // println("yes")

Donc, votre code complet ressemblerait à ceci:

class Person {
    var score1: Int? = 9

    func sum() {
        if score1 != nil {
            println("yes")
        }
        else {
            println("no")
        }
    }
}

var objperson = Person()
objperson.sum()
0
Cole