2014-06-06 44 views
0

好吧,讓我們想象一下,我有一個NSDate對象date,這是過去,我想計算已經過去的秒數。這就是我要做的事:Swift中的簡單數學運算不能正常工作

let timeInterval = -date.timeIntervalSinceNow 

然後我想分解到這分,秒及釐秒:

let seconds = Int(timeInterval) % 60 
let minutes = Int(timeInterval - seconds)/60 
let centiSeconds = Int((timeInterval - Int(timeInterval)) * 100) 

除了編譯器抱怨的最後兩行,我不能找出原因。

對於minutes行,它表示Could not find and overload for '/' that accepts the supplied arguments,對於centiSeconds行表示Could not find and overload for 'init' that accepts the supplied arguments。我究竟做錯了什麼?在Swift-land中這不是可以接受的嗎?

+0

如果Swift是類似於C或者Java的東西,那麼你不能這樣做:'Int(timeInterval - seconds)' - 表達式的類型覆蓋。嘗試'Int(timeInterval) - Int(秒)'(類型覆蓋甚至可能是多餘的)。 – usr2564301

+0

@Jongware很好,在第二行工作。我將不得不考慮第三行的不同表達式,以便我不必對錶達式執行類型覆蓋。順便說一句,這個禁令背後的推理是什麼? – Alex

回答

3

這就是你申請投的所有問題:

let timeInterval = -now.timeIntervalSinceNow 

let seconds = Int(timeInterval) % 60 
let minutes = (Int(timeInterval) - seconds)/60 
let centiSeconds = timeInterval - floor(timeInterval)) * 100 

根本的問題是,now.timeIntervalSinceNow返回一個NSTimeInterval這是一個浮點。其結果是,以下是一個編譯錯誤:

let minutes = Int(timeInterval - seconds)/60 

但是,錯誤的Xcode報告Could not find and overload for 'init' that accepts the supplied arguments是不正確的,這裏是不是根本原因。

+0

那麼,這確實很好,但爲什麼演員的位置呢? – Alex

+0

需要注意的是,必須使用floor來代替Int數截斷,因爲負數:Int(-30.9)是-30而floor(-30.9)是-31 – drewag

+0

@Alex非常好的問題,我仍然試圖解決這個問題! – ColinE