从 NSUserDefaults() 获取时的 If let 子句

If let clause when getting from NSUserDefaults()

我正在尝试管理这样的变量:

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

这行得通,但是,我试图通过在获取时使用 if let 来使其更安全:

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()
    }
  }

虽然这会出现黄色错误:"Conditional cast from 'Bool' to 'Bool' always succeeds."

那好吧:

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

现在更糟了:"Initializer for conditional binding must have Optional type, not 'Bool'"

正确的处理方式是什么?

您的主要方法很好。

NSUserDefaults

boolForKey 不是 return 可选的,因此任何可选的绑定尝试都是没有意义的。

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.

你需要这样写:-

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

希望这对您有所帮助:)