2015-08-20 1 views
13

Sono nuovo a Swift e sto cercando di capire il concetto Opzionale. Ho un piccolo pezzo di codice in Playground che mi dà l'errore "Il binding variabile in una condizione richiede un inizializzatore". Qualcuno può spiegare perché e come lo risolvo?Opzione opzionale Swift - Il binding variabile in una condizione richiede un inizializzatore

Voglio stampare solo "Sì" o "No" a seconda che "punteggio1" abbia o meno un valore. Ecco il codice:

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() 

risposta

10

L'istruzione if let accetta una variabile opzionale. Se è nullo, il blocco else o non viene eseguito nulla. Se ha un valore, il valore viene assegnato a una variabile diversa come tipo non facoltativo.

Così, il seguente codice restituisce il valore di SCORE1 o "No" se non c'è nessuno:

if let score1Unwrapped = score1 
{ 
    print(score1Unwrapped) 

} 

else 
{ 
    print("No") 
} 

Una versione più corta dello stesso sarebbe:

print(score1 ?? "No") 

Nel tuo caso , dove non si utilizza effettivamente il valore memorizzato nella variabile opzionale, è anche possibile verificare se il valore è nullo:

if score1 != nil { 
... 
} 
+0

Grazie LorenzSchaef - Sono praticamente arrivato alla stessa conclusione. – Harry

+1

Un'altra opzione quando non si utilizza il valore unwrapped è: if let _ = score1 {...} – mbehan

0

il problema è che if let assume si desidera creare una costante score1 con un certo valore. Se si desidera solo per verificare se contiene un valore, come in non nil si deve solo farlo come di seguito:

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

Così il vostro codice completo sarà simile a questa:

class Person { 
    var score1: Int? = 9 

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

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

Questo non è il diom usato in Swift per il test per nil. Le risposte sopra, nella forma "se let score1 = score {..." sono la strada da percorrere. Nota, la variabile unwrapped può avere lo stesso nome della variabile wrapped e anche questa è diventata la norma nel codice Swift. –

3

scrittura

if let score1 { 

non ha senso. Se volete vedere se il punteggio ha un valore, utilizzare

if score1 != nil { 

o

if let score = score1 { 

L'ultimo caso si lega una nuova non-optional costante score-score1. Ciò consente di utilizzare score all'interno dell'istruzione if.

+0

Grazie Aderstedt !! – Harry

Problemi correlati