2014-06-15 28 views
7

Quindi sono molto nuovo nel rendere APP ad Swift, sto cercando di fare un input molto semplice nei campi di testo, prendere il valore e usarli come Int per alcuni calcoli.Converti stringa di campo di input in Int in Swift

Ma qualcosa non funziona correttamente con il 'var distanza'

 var handicapTal:Int 
     var MagicNumber:Int 
     var handicap = inputHCP.text.toInt() 
     var distance = inputDistance.text.toInt() 

     if (handicap >= 0 && handicap <= 20) 
     { 
      handicapTal = 30 
     } 
     else if(handicap > 20 && handicap <= 40){ 
      handicapTal = 10 
     } 

     MagicNumber = distance - handicapTal 

sua l'ultima riga di codice che danno un errore. Si dice errore irreversibile: non è possibile scartare Opzionale.Nessuno

risposta

9

distanza, nel tuo esempio, è un Int? altrimenti noto come Int. facoltativo .toInt() restituisce Int? poiché è possibile che la conversione da String a Int fallisca. Vedere il seguente esempio:

Welcome to Swift! Type :help for assistance. 
    1> let a = "12" 
a: String = "12" 
    2> let b = a.toInt() 
b: Int? = 12 
    3> let c = "Hello" 
c: String = "Hello" 
    4> let d = c.toInt() 
d: Int? = nil 
    5> if let e = a.toInt() { println("e = \(e)") } 
e = 12 
    6> if let f = c.toInt() { println("Huh?") } 
    7> 
+0

Ma come posso usare l'Int? digitare per fare più calcoli con? Posso nel tuo esempio fare 'let g = b + b? –

+0

@RasmusBidstrup Sì, è possibile. – NobodyNada

+0

@Rasmum, se nil == b {// gestisce l'errore} else {let g = b! + b! } – Kaydell

1

Ho trovato il problema! Innanzitutto devi inizializzare handicapTal. Puoi farlo con: var handicaptal: Int!. Quando si inserisce uno ! dietro esso sarà impostato su zero. O impostalo su 0. var handicaptal: Int = 0 Ho provato questo codice e funziona senza errori!

+0

Credo che invece di usare un tipo facoltativo di Int Intatto, che può essere nullo, sarebbe meglio testare per nil e usare l'operatore unwrap come if nil == handicapTal quindi {// handle error} else {// usa handicapTal! in espressioni} – Kaydell

+0

È anche possibile farlo, ma non vedo un motivo per il downvote .... – Bas

+0

il motivo del down-vote è che se si utilizzano opzioni implicitamente non aperte come Int! e c'è un errore in toInt() la variabile otterrà il valore di nil. Se non si controlla nulla, il programma si bloccherà quando toInt() restituirà zero. Hai testato il tuo codice con qualcosa come "ABC" .toInt() che restituirà nil e potrebbe bloccare l'intero programma se usi il risultato senza verificare se è nullo. – Kaydell