2016-07-03 6 views
3

Bitte markieren Sie nicht als Duplikat, bis Sie die ganze Sache gelesen haben. Dies ist spezifisch für Swift 3.Wie konvertiert Swift 3 Ausgabe von readLine() zu Integer?

Ich habe Funktionen, die Parameter wie Ints, Floats, etc. Ich möchte die Ausgabe von readLine() nehmen und Swift akzeptieren die Ausgabe von readLine() als diese Typen , aber leider gibt readLine() einen String aus? und wenn ich versuche, es zu konvertieren, sagt es mir, dass es nicht ausgepackt ist. Ich brauche Hilfe. Ich benutze Ubuntu 16.04.

Zum Beispiel, wenn ich area(width: 15, height: 15) hätte, wie würde ich 15 und 15 durch zwei Konstanten ersetzen, die readLine() oder ein Äquivalent zu readLine() enthalten, um Eingaben von einem Benutzer im Terminal zu akzeptieren?

Beachten Sie auch, dass das Programm, das ich schreibe, speziell Mathematik tut, da die meisten Leute mit Strings zufrieden sind, dies ist buchstäblich ein CLI-basierter Rechner.

EDIT 1 (lol) Okay, hier ist eine genauere Erklärung von oben. Der folgende Code wird die Fläche eines Trapezes drucken:

import Foundation 

func areaTrapezoid(height: Float, baseOne: Float, baseTwo: Float) { 
    let inside = baseOne + baseTwo 
    let outside = 0.5 * height 
     let result = outside * inside 
     print("Area of Trapezoid is \(result)") 
    } 

areaTrapezoid(height: 10, baseOne: 2, baseTwo: 3) 

So, das Trapez eine Höhe von 10 Einheiten hat, und zwei Basen, die Längen von 2 bzw. 3 haben. Allerdings möchte ich etwas tun:

import Foundation 

func areaTrapezoid(height: Float, baseOne: Float, baseTwo: Float) { 
    let inside = baseOne + baseTwo 
    let outside = 0.5 * height 
     let result = outside * inside 
     print("Area of Trapezoid is \(result)") 
    } 

let h = readLine() 
areaTrapezoid(height: h, baseOne: 2, baseTwo: 3) 

Außer, wie bereits offensichtlich ist, readline() ausgibt ein optionaler String, und kein Float. Ich möchte, dass der Benutzer in der Lage ist, die Zahlen per CLI in einer Art interaktiver Weise einzugeben, wenn Sie so wollen. Ich lerne gerade Swift, aber ich habe etwas ähnliches in C++ gemacht, als ich diese Sprache gelernt habe. Vielen Dank für Ihre Hilfe.

Antwort

2

readLine() gibt einen optionalen String zurück.

Um die Zeichenfolge auszupacken, können Sie if let verwenden, und die Zeichenfolge in eine Ganzzahl zu konvertieren, verwenden Sie Int().

Beispiel:

import Foundation 
if let typed = readLine() { 
    if let num = Int(typed) { 
     print(num) 
    } 
} 

Angenommen, Sie haben den Benutzer zweimal aufgefordert:

let prompt1 = readLine() 
let prompt2 = readLine() 

Dann:

if let response1 = prompt1, 
    response2 = prompt2, 
    num1 = Int(response1), 
    num2 = Int(response2) { 
    print("The sum of \(num1) and \(num2) is \(num1 + num2)") 
} 
+0

ich nicht wusste ich eigentlich kommentieren könnte! Okay, sehen Sie sich das Update an. Gilt das dort? –

+0

Ja, alle gleich. Sie können 'Float()' oder 'Double()' genauso verwenden wie 'Int()' in meinem Beispiel, um von der String-Eingabe zu konvertieren. – Moritz

+0

Ausprobiert und wahr, Bruder. Danke, ich dachte nicht, dass es einen einfachen Weg geben würde! –