代码之家  ›  专栏  ›  技术社区  ›  nontomatic

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

  •  0
  • nontomatic  · 技术社区  · 9 年前

    我正试图管理这样一个变量:

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

    但这将显示黄色错误: “从‘布尔’到‘布尔’的条件转换总是成功的。”

    好吧,那么:

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

    现在更糟了: 条件绑定的初始值必须具有可选类型,而不是“Bool”

    正确的处理方法是什么?

    2 回复  |  直到 9 年前
        1
  •  3
  •   vadian    9 年前

    你的主要方法很好。

    boolForKey 属于 NSUserDefaults 不返回可选的,因此任何可选的绑定尝试都没有意义。

    func boolForKey(_ aKey: String) -> Bool
    

    如果布尔值与指定键关联,则该值为 返回。如果找不到密钥,此方法将返回NO。

        2
  •  1
  •   N.Raval    9 年前

    你需要这样写:-

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

    希望这将对您有所帮助:)