2017-06-29 8 views
-1

ファンクションラボの最後の問題が発生したときにSwift App Developmentコースを実行しています。ネストされたファンクションの戻り値と親ファンクションの引数の比較

アイデアは、4つのDouble引数を取り、文字列を返す関数を記述し、3つの同一の引数を共有し、Doubleを返す関数をネストします。親関数は入れ子関数funcの戻り値を比較し、それを4番目の引数(より小さい)と比較し、2つの文字列のうちの1つを返します。

func pacing(currentDistance: Double, totalDistance: Double, currentTime: Double, goalTime: Double) -> String { 
    func calculatePace(currentDistance: Double, totalDistance: Double, currentTime: Double) -> Double { 
     let predictedFinish = (currentTime/currentDistance) * totalDistance 
     return predictedFinish 
    } 
    if calculatePace() <= goalTime { 
     print("Keep it up!") 
    } else { 
     print("You've got to push harder!") 
    } 
} 

calculatePace()< = goalTimeは私がアップトリップなっています。取得するエラーです:パラメータの引数がありません。代わりにpredictFinishを参照しようとしました。エラー私はそれを未解決の識別子の使用を取得します。私は、全体の

calculatePace(currentDistance: Double, totalDistance: Double, currentTime: Double) 

を呼び出して試してみたと私は取得エラーです:予想引数の型「ダブル」にタイプ「Double.Type」の値を変換できません。これは初心者クラスであることを覚えておいてください。私はおそらくこれを思っています。すべての手がかりは?

答えて

1

このコードをコンパイルするのに2つの問題があります。 1.存在しないcalculatePace()(実際の関数には3つのパラメータがあります)を呼び出しようとしていますか?2.実際にはStringを返していません。これらの両方の問題を修正した後、このコードはうまく動作します。

func pacing(currentDistance: Double, totalDistance: Double, currentTime: Double, goalTime: Double) -> String { 
     func calculatePace(currentDistance: Double, totalDistance: Double, currentTime: Double) -> Double { 
      let predictedFinish = (currentTime/currentDistance) * totalDistance 
      return predictedFinish 
     } 
     if calculatePace(currentDistance: currentDistance, totalDistance: totalDistance, currentTime: currentTime) <= goalTime { 
      return "Keep it up!" 
     } else { 
      return "You've got to push harder!" 
     } 
    } 
+0

これは絶対にそれでした。 if else文は文字列表示を返し、ネストされた関数は明示的にそのパラメータ(つまりcurrentDistance:currentDistanceではなくcurrentDistance)を必要とするため、親関数の戻り値は文字列ではありません。ありがとう! – Dan

関連する問題