it-swarm.com.de

Swift Optionals - Die Variablenbindung in einer Bedingung erfordert einen Initialisierer

Ich bin neu bei Swift und versuche, das optionale Konzept herauszufinden. Ich habe ein kleines Stück Code in Playground, das mir den Fehler "Variable Bindung in einem Zustand erfordert einen Initialisierer" gibt. Kann jemand bitte erklären warum und wie kann ich das Problem beheben?

Ich möchte nur "Ja" oder "Nein" drucken, abhängig davon, ob "Score1" einen Wert hat oder nicht. Hier ist der 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

Die if let-Anweisung nimmt eine optionale Variable an. Wenn es null ist, wird der else-Block oder nichts ausgeführt. Wenn es einen Wert hat, wird der Wert einer anderen Variablen als nicht optionalem Typ zugewiesen.

Der folgende Code würde also den Wert von score1 oder "No" ausgeben, wenn keiner vorhanden ist:

if let score1Unwrapped = score1
{
    print(score1Unwrapped)

}

else
{
    print("No")
}

Eine kürzere Version desselben wäre:

print(score1 ?? "No")

In Ihrem Fall, in dem Sie den in der optionalen Variablen gespeicherten Wert nicht tatsächlich verwenden, können Sie auch prüfen, ob der Wert gleich Null ist:

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

Schreiben

if let score1 {

macht keinen Sinn Wenn Sie sehen möchten, ob Score einen Wert hat, verwenden Sie

if score1 != nil {

oder

if let score = score1 {

Der letzte Fall bindet eine neue nicht-optionale Konstante score an score1. Dadurch können Sie score in der if-Anweisung verwenden.

5
Aderstedt

das Problem ist, dass if let davon ausgeht, dass Sie eine Konstante score1 mit einem bestimmten Wert erstellen möchten. Wenn Sie nur prüfen möchten, ob er einen Wert enthält, wie in nicht nil, sollten Sie dies wie folgt tun:

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

Ihr vollständiger Code würde also so aussehen:

class Person {
    var score1: Int? = 9

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

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