如何获得nil值的NSDate

时间:2014-11-25 15:01:00

标签: ios swift 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是否具有nil值来捕获应用程序第一次运行,而是尝试为这两种情况开发一些更短的通用代码,第一次和其他时间将controlDate var保存在UserDefaults中。

然而它并没有正常工作((我非常感谢你的帮助!)

enter image description here

2 个答案:

答案 0 :(得分:0)

timeInterval是可选的,您需要先解开它

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

More on Optionals

答案 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上调用某个方法,因此在这种情况下无需进行可选的解包。