If let clause when getting from NSUserDefaults()

痞子三分冷 提交于 2019-12-12 03:35:51

问题


I'm trying to manage a variable like this:

var isFinished: Bool {
    get {
      return NSUserDefaults.standardUserDefaults().boolForKey("isFinished")
    }
    set {
      NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished")
      NSUserDefaults.standardUserDefaults().synchronize()
    }
  }

This works, however, I'm trying to make it more safe by using an if let when getting:

var isFinished: Bool {
    get {
      if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") as? Bool {
        return isFinished
      }
    }
    set {
      NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished")
      NSUserDefaults.standardUserDefaults().synchronize()
    }
  }

This will give a yellow error though: "Conditional cast from 'Bool' to 'Bool' always succeeds."

Alright then:

if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") {
  return isFinished
}

Now it's worse: "Initializer for conditional binding must have Optional type, not 'Bool'"

What's the correct way of handling this?


回答1:


Your primary approach is fine.

boolForKey of NSUserDefaults doesn't return an optional therefore any optional binding attempt is meaningless.

func boolForKey(_ aKey: String) -> Bool

If a Boolean value is associated with the specified key, that value is returned. If the key was not found, this method returns NO.




回答2:


You need to write in this way :-

if let isFinished : Bool = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") 
{
      return isFinished
}

Hope this will help you :)



来源:https://stackoverflow.com/questions/35668986/if-let-clause-when-getting-from-nsuserdefaults

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!