我已经四处寻找并被这个谜语弄得晕头转向。
在Swift,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)
控制台输出:
"游乐场执行失败:/var/folders/4n/88gryr0j2pn318sw_g_mgkgh0000gn/T/lldb/10688/playground625.swift:24:30:错误:额外参数' timeIntervalSinceNow'在电话中 让one_day_from_now = NSDate(timeIntervalSinceNow:day_seconds)"
这里发生了什么?为什么NSDate棘手?
答案 0 :(得分:6)
这是因为timeIntervalSinceNow
期待NSTimeInterval
Double
。
如果你这样做:
let day_seconds = 86400
day_second是Int类型,它不是方法所期望的。 但是,当您键入数字本身时:
let one_day_from_now = NSDate(timeIntervalSinceNow:86400)
编译器暗示你传递了Double,因为它是方法所期望的,这是好的。
解决方案可以使用
NSTimeInterval(day_seconds)
或Double(day_seconds)
相同或当您声明常量时确保它是双倍的,例如:
let day_seconds = 86400.0
或
let day_seconds: Double = 86400
或
let day_seconds: NSTimeInterval = 86400