麻烦使用Swift NSDate"timeIntervalSinceNow"

drp*_*r26 6 swift swift-playground

我四处搜寻,被这个谜语弄得晕头转向.

在Swift,Xcode 6.2中,这些行有效:

let day_seconds = 86400
let one_day_from_now = NSDate(timeIntervalSinceNow:86400)
Run Code Online (Sandbox Code Playgroud)

但是以下内容会返回错误:

let day_seconds = 86400
let one_day_from_now = NSDate(timeIntervalSinceNow:day_seconds)
Run Code Online (Sandbox Code Playgroud)

控制台输出:

"游乐场执行失败:/var/folders/4n/88gryr0j2pn318sw_g_mgkgh0000gn/T/lldb/10688/playground625.swift:24:30:错误:在调用中额外参数'timeIntervalSinceNow'让one_day_from_now = NSDate(timeIntervalSinceNow:day_seconds)"

这里发生了什么?为什么NSDate棘手?

Gre*_*reg 6

这是因为timeIntervalSinceNow期待的NSTimeInterval是Double.

如果你这样做:

let day_seconds = 86400
Run Code Online (Sandbox Code Playgroud)

day_second是Int类型,它不是方法所期望的.但是,当您键入数字本身时:

let one_day_from_now = NSDate(timeIntervalSinceNow:86400)
Run Code Online (Sandbox Code Playgroud)

编译器隐含你传递Double,因为它是方法所期望的,这是好的.

解决方案可以使用NSTimeInterval(day_seconds)或者使用 Double(day_seconds)相同或者当您声明常量时确保它是双倍的,例如:

let day_seconds = 86400.0
Run Code Online (Sandbox Code Playgroud)

要么

let day_seconds: Double = 86400
Run Code Online (Sandbox Code Playgroud)

要么

let day_seconds: NSTimeInterval = 86400
Run Code Online (Sandbox Code Playgroud)