2017-02-02 7 views
2

このメソッドを呼び出すと、エラーが発生します。時間、分、または秒に代入する際にNaNまたは無限の値を処理する方法は?スイフト3:致命的なエラー:無限大またはNaNのいずれかであるため、Double値をIntに変換できません

private func secondsToFormattedString(totalSeconds: Float64) -> String{ 
    let hours:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 86400)/3600) 

    let minutes:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 3600)/60) 
    let seconds:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 60)) 

    if hours > 0 { 
     return String(format: "%i:%02i:%02i", hours, minutes, seconds) 
    } else { 
     return String(format: "%02i:%02i", minutes, seconds) 
    } 
} 
+1

は 'TimeInterval'を使用することを考えてみましょう。ここ

は私のコードですと 'DateComponentsFormatter' – vadian

+2

関数をどのように呼び出すか、問題が発生したときのtotalSecondsの値は何ですか? - 自己完結型の再現可能なテストケースが役立ちます。 –

答えて

8

あなたはtotalSecondsは次のように、有効な値であるかどうかを確認する必要があります:

guard !(totalsSeconds.isNaN || totalSeconds.isInfinite) else { 
    return "illegal value" // or do some error handling 
} 

そして、このチェック: Convert Float to Int in Swift

+0

ナノも無限も有限ではないので、 'guard totalSeconds.isFinite else {...}'と言うことができます。 – Hamish

+0

@ハミッシュあなたは間違いなく正しいです。元の質問がNaNとInfinityを明示的に言及していたので、私はちょうど異なるAPIを指摘したがっています。 –

関連する問題