2016-11-11 8 views
0

Ich schreibe ein Mac OS Command Line Tool in Xcode. Die Variable "num1" gibt immer null zurück. Ich habe es am Anfang erklärt, also sollte es eine globale Variable sein. Wie kann ich das ansprechen?Wie kann ich den Gültigkeitsbereich einer Variablen in Swift erweitern

var num1: Int! 

if userChoice == "add" { 
    print("Enter first number") 
    if let num1 = readLine() { 
    } 
} 

print ("\(num1)") 
+1

Das 'num1' lassen führt eine zweite Variable in keinem Zusammenhang mit der ersten und lokal auf dem' if'. Sie sollten diesem einen anderen Namen geben (und dem globalen zuweisen, sobald Sie eine korrekte Eingabe erhalten haben). Machen Sie auch das globale nicht-optional. – Thilo

+1

Beachten Sie auch, dass die 2. 'num1' Variable eine optionale' String' ist, keine 'Int'. – rmaddy

Antwort

2

Wie erwähnt, haben Sie zwei num1 Variablen. Die zweite ist auf den Block der 2. if Anweisung beschränkt.

Sie haben auch ein Problem, dass readLine eine optionale String zurückgibt, nicht ein Int.

Sie wollen wahrscheinlich Code mehr wie folgt aus:

var num1: Int? 

if userChoice == "add" { 
    print("Enter first number") 
    if let line = readLine() { 
     num1 = Int(line) 
    } 
} 

print ("\(num1)") 

Natürlich können Sie jetzt brauchen, um mit num1nil zu sein.

Eine Option ist, um richtig den Wert auszupacken:

if let num = num1 { 
    print("\(num)") 
} else { 
    print("num1 was nil") 
} 
+0

Funktioniert viel besser! Einzige Sache ist nun, wie kann ich "Optional (11)" als nur 11 ausgeben? – John

+0

Siehe mein Update. Klingt so, als müsste man das Buch "The Swift Programming Language" von Apple lesen. Es umfasst alle wichtigen Dinge wie optionale Variablen und den Rest der Sprache. – rmaddy

0
  1. Rufen Sie die zweite num1 etwas anderes.
  2. Setzen Sie etwas in die if.
var num1: Int! 

if userChoice == "add" { 
    print("Enter first number") 
    if let num2 = readLine() { 
     // This if-let runs if num2 is not nill. 
     print ("\(num2)") 
     num1 = Int(num2) 
    } 
} 

print ("\(num1)") 
+0

Ich habe ein seltsames Gefühl von Déjà vu :) – rmaddy

Verwandte Themen