2016-07-04 5 views
-1

Es funktioniert, aber ich denke nicht, dass es gut genug ist. Ist es möglich, readLine() außerhalb eines if-let-Konstrukts zu verwenden ??? Ich finde den Umfang sehr einschränkend und glaube nicht, dass ich Argumente übergeben kann, die dies über die Befehlszeile mit dieser Methode verwenden. Kann jemand einen besseren Ansatz für dieses Problem vorschlagen?Wie kann ich diesen Swift readLine-Code verbessern?

import Foundation 

    print("\nTemperature Conversion\n") 
    print("What is your current Temperature Unit?\n ") 
    print("Valid options are f or F for Fahrenheit, c or C for Celsius: \n") 

    if var temp = readLine() { 
     switch temp{ 
     case "c","C": 
      print("And the temperature: ") 
      if var degrees = readLine() { 
       var fahr = (5 * Float(degrees)! * 1.8 + 32) 
       print("\(degrees) Degrees is equal to \(fahr) degrees Fahrenheit. \n") 
      } else { 
       print("You entered an invalid temperature") 
      } 
     case "f","F": 
      print("Fahrenheit") 
      if var degrees = readLine() { 
       var celsius = (5 * Float(degrees)! - 32)/9; 
       print("\(degrees) Degrees is equal to \(celsius) degrees Fahrenheit. \n") 
      } else { 
       print("You entered an invalid temperature") 
      } 
     default: 
      print("Not a valid Temperature unit") 
     } 
    } 

Antwort

0

readLine() liefert einen String?, die nil ist, wenn es keine weitere Eingabe (EOF die CTRL-D in Xcode ist) ist. Sie müssen es irgendwie auspacken und die if let Aussage ist perfekt dafür.

Argumente haben nichts mit der Standardeingabe (readLine()) zu tun, können Sie die Argumente wie diese stattdessen bekommen können:

Process.arguments // type [String] 
Verwandte Themen