2016-07-04 10 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()は(XcodeでCTRL-DであるEOF)は、複数の入力がない場合nilあるString?を返します。あなたは何とかそれをアンラップする必要があり、if letステートメントはそれには完璧です。

引数は、標準入力(readLine())とは何の関係もない、あなたの代わりにこのような引数を取得することができます:

Process.arguments // type [String] 
関連する問題