2017-06-02 5 views
0

Ich möchte eine Zahl als Zeichenfolge eingeben und verwende readLine, die eine Zeichenfolge zurückgibt ?. Dann möchte ich den eingegebenen String in einen Int konvertieren, der auch einen Int? Wenn eines der optionalen Werte null ergibt, wird ein Fehler ausgegeben. Andernfalls verwenden Sie den Int. Der folgende Code funktioniert, aber es muss einen besseren Weg geben. Irgendwelche Ideen?So minimieren Sie Optionale

print ("Enter number: ", terminator:"") 
let number = readLine() 

if number != nil && Int (number!) != nil 
{ 
    let anInt = Int (number!)! 
} 
else 
{ 
    print ("Input Error") 
} 

Antwort

3

Sie das Abwickeln von readLine Antwort kombinieren können und die Umstellung auf Int und sicherstellen, dass die numerische Umwandlung in eine einzige guard Anweisung erfolgreich war, zum Beispiel

guard let string = readLine(), let number = Int(string) else { 
    print("input error") 
    return 
} 

// use `number`, which is an `Int`, here 

können Sie spinnen offensichtlich, dass herum, wenn Sie wollen:

if let string = readLine(), let number = Int(string) { 
    // use `number`, which is an `Int`, here 
} else { 
    print("input error") 
} 
+1

Ein anderer Ansatz: 'guard let Zahl = readLine(). map {Int ($ 0)} else {...' – Alexander

Verwandte Themen