从NSUserDefaults()获取时是否让子句 [英] If let clause when getting from NSUserDefaults()

查看:92
本文介绍了从NSUserDefaults()获取时是否让子句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

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

这将给出黄色错误:从'Bool'到'Bool'的条件强制转换总是成功."

然后:

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

现在更糟了:用于条件绑定的初始化程序必须具有可选类型,而不是'Bool'"

处理此问题的正确方法是什么?

What's the correct way of handling this?

推荐答案

您的主要方法很好.

boolForKey不会返回可选的,因此任何可选的绑定尝试都是没有意义的.

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

func boolForKey(_ aKey: String) -> Bool

如果布尔值与指定键相关联,则该值为 回来.如果未找到密钥,则此方法返回NO.

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

这篇关于从NSUserDefaults()获取时是否让子句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆