2016-07-04 80 views
-1

它有效,但我認爲不夠好。是否有可能在if-let構造之外使用readLine()?我只是發現範圍非常有限,不相信我可以使用此方法從命令行使用此方法傳遞參數。任何人都可以提出更好的方法解決這個問題?我該如何改進這個Swift readLine代碼?

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") 
     } 
    } 

回答

0

readLine()返回String?,這是nil如果沒有更多的輸入(EOF這是在Xcode CTRL-d)。您需要以某種方式解開它,並且if let聲明對此非常合適。

參數無關使用標準輸入(readLine()),你可以得到的參數是這樣,而不是:

Process.arguments // type [String]