如何测试integerForKey是否等于nil?使用NSUserDefaults

时间:2015-05-06 23:14:03

标签: swift nsuserdefaults

到目前为止,我有一个函数试图查看某人是否已经有一个代码,如果他们还没有代码,那么它会为他们生成一个代码。  func checkID() - > INT {

constexpr

当我试图说出NSUserDefaults.standardUserDefaults()时,我收到一条错误消息.integerForKey(“Code”)!= nil

我得到的错误信息是“Type'Int'不符合协议'NilLiteralConvertible'”

我可以做些什么来试图解决这个问题?我做错了什么?

3 个答案:

答案 0 :(得分:13)

integerForKey始终返回一个值。如果没有,只有0。

所以你应该这样检查:

if let currentValue = NSUserDefaults.standardUserDefaults().objectForKey("Code"){
    //Exists
}else{
    //Doesn't exist
}

答案 1 :(得分:1)

简短的回答是“你做不到”。没有办法判断integerForKey的零结果是表示存储的零值,还是没有值。

Christian使用objectForKey(返回和可选)和可选绑定的答案是正确的答案。

答案 2 :(得分:0)

您应该可以删除'!= nil'。例如,

if (NSUserDefaults.standardUserDefaults().integerForKey("Code")) {

}
else{
    var code = Int(arc4random_uniform(1000000000))
    NSUserDefaults.standardUserDefaults().setInteger(code, forKey: "Code")
}
return NSUserDefaults.standardUserDefaults().integerForKey("Code")

如果找不到整数,只需检索密钥的值就应该返回false。