如何得到无价值的NSDate

我是Swift和一般编码的初学者。 现在我正在尝试开发一段代码来设置每天一次的动作的时间限制。

@IBAction func yesButtonPressed(sender: AnyObject) { //To retrive the control date value. First time it has nil value var controlDate = NSUserDefaults.standardUserDefaults().objectForKey("controlDate") as? NSDate //To check current date to compare with var currentDate = NSDate() // To check if time interval between controlDate and currentDate is less than 1 day var timeInterval = controlDate?.timeIntervalSinceNow var dayInSeconds = 24 * 3600 if timeInterval < dayInSeconds { //show alert with message "You've done it recently. Pls wait a bit" } else { //perfome the action //update the value of NSUserDefaults.standardUserDefaults().objectForKey("controlDate") with current time stamp } } 

而不是检查controlTime var是否有零值来捕捉应用程序的第一次运行,我试图开发一些较短的,通用的代码,这两种情况下,第一次和其余时间controlDate var将被保存在UserDefaults。

尽pipe如此,它不能正常工作((我很感激你的帮助!

在这里输入图像说明

dayInSeconds是进行比较的错误types。 types推断确定它应该是一个InttimeIntervalSinceNow是一个Double下的封面。 因此,你不能准确地比较一个Int和一个Double。

以这种方式创builddayInSeconds ,以便将其types推断为Double,而不是Int。

 var controlDate = NSUserDefaults.standardUserDefaults().objectForKey("controlDate") as? NSDate var currentDate = NSDate() var timeInterval = controlDate?.timeIntervalSinceNow //*** HERES THE CHANGE*** var dayInSeconds = 24.0 * 3600 if timeInterval < dayInSeconds { } 

由于您不打算在timeInterval上调用方法,在这种情况下,可选的展开不是必需的。

timeInterval是一个可选的,你需要先解开它

 if let ti = timeInterval { if ti < dayInSeconds { ... } } 

更多关于选项