2017-07-08 9 views
-3

私は、ユーザーが入力した値がnilかどうかをチェックする関数を持っています(配偶者は2倍になる)。すべての変数は関数内で宣言されます。 今、私は関数からvarを取得しようとしていると私の他のコード(関数の外)で使用します。私は返品オプションでそれをやろうとしましたが、エラーが表示されます。 私はそれをgoogleで探しています。私は実際にそれを行うことができるかどうかは分かりません。 誰も私がそれを解決する方法を考えているのですか? ここに私のコードです:関数から値を取得する方法

func numbers() -> Double { 
print("enter plate heigh") 
let num1 = Double(readLine()!) 

if checkIfNil(value1: num1){ 
    print("plaese enter valid heigh") 
    numbers() 
} 
else{ 
    let x = num1 
    print("good! \(num1)") 
    return x! 
} 
return 0.0 
} 

let platHeigh = numbers() 
print("is: \(platHeigh)") 

tnx!この行で

+1

どのようにリターンステートメントpls共有スニペットを使用しました – VIPER

+0

私はそれを試してみましたが成功しないので、私はそれを消去します。 – APRULE

+0

あなたはそれがうまくいかなかったことを示すことができない場合、人々があなたが働かなかったものを修正するのを手助けすることをどのように期待していますか? – pjs

答えて

2

投稿されたコードの主な問題は、numbers関数内でnumbers()を呼び出した結果を利用していないということです。また、クラッシュの原因となる無限値を強制的にアンラップすることにも問題があります。

注:これは遊び場では実行しないでください。これはコマンドラインアプリでのみ使用してください。

それは(今の力アンラップの問題を無視して)する必要があります。

func numbers() -> Double { 
    print("enter plate heigh") 
    let num1 = Double(readLine()!) 

    if checkIfNil(value1: num1){ 
     print("plaese enter valid heigh") 
     return numbers() // you need to return here 
    } 
    else{ 
     let x = num1 
     print("good! \(num1)") 
     return x! 
    } 
} 

しかし、再帰は本当にこのような何かのために良い解決策ではありません。単純なループを使用します。

func numbers() -> Double { 
    while true { 
     print("enter plate height:") 
     if let text = readLine() { 
      if let num = Double(text) { 
       print("good! \(num)") 
       return num 
      } else { 
       print("Invalid number: \(text)") 
      } 
     } 
    } 
} 
+0

最初の例で「返り値()」をしなければならない理由を私に説明できますか? – APRULE

+0

'numbers'関数を呼び出すことの価値を返すためです。あなたのコードは、取得した値を無視していました。ちょうど0を返すために底に落ちました。 – rmaddy

+0

これを行うと、私は最後のreturn文( "return 0.0")を削除できますか?また、もし私がこれをすれば、どうして私はそれが無限を返さないことを確かめることができますか? – APRULE

-1

readLine()はnilを返す場合

let num1 = Double(readLine()!) 

、すでにクラッシュがあるでしょう。あなたは!を使ってそれをアンラップしているからです。

良い方法はif let statementを使用することです。それがnilないだけ場合

var input: Double? = nil 

func numbers() -> Double? { 
    if let num1 = input { 
     print("good! \(num1)") 
     return num1 
    } else { 
     print("plaese enter valid heigh") 
     return nil 
    } 
} 

この関数NUM1では、あなたのフィールドから値が割り当てられます。その後、それが返されます。

それ以外の場合は、エラーメッセージが表示され、nilが返されます。今あなたが知っているあなたの機能の外に、何も入っていないこと。

関連する問題