我是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是否具有nil值来捕获应用程序第一次运行,而是尝试为这两种情况开发一些更短的通用代码,第一次和其他时间将controlDate var保存在UserDefaults中。
然而它并没有正常工作((我非常感谢你的帮助!)
答案 0 :(得分:0)
timeInterval
是可选的,您需要先解开它
if let ti = timeInterval {
if ti < dayInSeconds {
...
}
}
答案 1 :(得分:0)
dayInSeconds
是进行比较的错误类型。类型推断确定它应该是Int
,而timeIntervalSinceNow
是双重的。因此,您无法准确地比较Int和Double。
以这种方式创建dayInSeconds
,以便将其类型推断为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
上调用某个方法,因此在这种情况下无需进行可选的解包。