【问题标题】:How can I test if an integerForKey is equal to nil? Using NSUserDefaults如何测试 integerForKey 是否等于 nil?使用 NSUserDefaults
【发布时间】:2015-07-17 07:52:37
【问题描述】:

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

    if (NSUserDefaults.standardUserDefaults().integerForKey("Code") != nil) {

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

当我尝试说 NSUserDefaults.standardUserDefaults().integerForKey("Code") != nil 时收到一条错误消息

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

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

【问题讨论】:

标签: swift nsuserdefaults


【解决方案1】:

integerForKey 总是返回一个值。如果什么都没有,就只有 0。

所以你应该这样检查:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您应该能够删除 '!= 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。

      【讨论】:

      • 我收到另一条错误消息,说“类型'int'不符合协议'BooleanType'。”
      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2010-10-06
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2010-11-30
      相关资源
      最近更新 更多