2015-04-22 83 views
6

我已經搜索周圍,並由這個謎語flummoxed。麻煩使用Swift NSDate「timeIntervalSinceNow」

在斯威夫特時,Xcode 6.2,這些線路的工作:

let day_seconds = 86400 
let one_day_from_now = NSDate(timeIntervalSinceNow:86400) 

但是下面會返回一個錯誤:

let day_seconds = 86400 
let one_day_from_now = NSDate(timeIntervalSinceNow:day_seconds) 

控制檯輸出:

"Playground execution failed: /var/folders/4n/88gryr0j2pn318sw_g_mgkgh0000gn/T/lldb/10688/playground625.swift:24:30: error: extra argument 'timeIntervalSinceNow' in call let one_day_from_now = NSDate(timeIntervalSinceNow:day_seconds)"

這是怎麼回事?爲什麼NSDate技巧?

+0

它不是NSDate技巧。這是Swift的數字技巧...... :( – matt

+1

與您的問題無關,但不要假定有一天有86400秒(想到夏令時轉換)。更好地使用NSCalendar方法進行所有日曆計算 –

回答

6

這是因爲timeIntervalSinceNow預計NSTimeInterval這是Double

如果你這樣做:

let day_seconds = 86400 

DAY_SECOND是int型的不是方法的期望。 但是當你輸入自己的號碼:

let one_day_from_now = NSDate(timeIntervalSinceNow:86400) 

編譯器隱,你是通過雙擊,因爲它是什麼方法期望,這是確定的。

解決方案cancould使用 NSTimeInterval(day_seconds)Double(day_seconds)這是相同的,或當你聲明常量確保它是雙層,例如:

let day_seconds = 86400.0 

let day_seconds: Double = 86400 

let day_seconds: NSTimeInterval = 86400 
+0

詳盡但正確。 :) – matt

+0

謝謝格雷格,非常清楚的解釋。我現在對Swift數字技巧有所瞭解。我爲重複的問題表示歉意,馬特! – drpecker26