到目前为止,我有一个函数试图查看某人是否已经有一个代码,如果他们还没有代码,那么它会为他们生成一个代码。 func checkID() - > INT {
constexpr
当我试图说出NSUserDefaults.standardUserDefaults()时,我收到一条错误消息.integerForKey(“Code”)!= nil
我得到的错误信息是“Type'Int'不符合协议'NilLiteralConvertible'”
我可以做些什么来试图解决这个问题?我做错了什么?
答案 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。