NSUserDefaults boolForKey

NSUserDefaults boolForKey

我正在尝试让 NSUserDefaults 在我的应用程序中工作。下面的代码应该检查 NSUserDefaults 中是否有一个名为 "iCloudOn" 的 bool 值。如果存在,它将 UISwitch 的值分配给 NSUserDefault。如果没有,它将继续并将 false 分配给 NSUserDefault。

我已经标记了出现错误的行。我收到的错误是 "Bound value in a conditional binding must be of Optional type." 我不知道为什么会收到此错误以及我需要做什么才能使它正常工作。谁能帮忙解释一下?

class SettingsTableViewController: UITableViewController{

@IBOutlet weak var iCloudUISwitch: UISwitch!

let appSettings = NSUserDefaults.standardUserDefaults()

override func viewDidLoad() {
    super.viewDidLoad()

    //THIS IS THE LINE I AM GETTING AN ERROR ON
    if  let iCloudOn = appSettings.boolForKey("iCloudOn") {
        //iCloud is on
        iCloudUISwitch.on = appSettings.boolForKey("iCloudOn")
    }
    else {
        //Nothing stored in NSUserDefaults yet. Set a value.
        appSettings.setValue(false, forKey: "iCloudOn")
    }   
}

函数 boolForKey 没有 return 可选。它总是 return 是真还是假。如果密钥在用户默认值中不存在,则它 return 为假。

您应该使用 returns AnyObject? 的 objectForKey,然后将其转换为 Bool

编辑:

如果今天为 Swift 编写此函数,它几乎肯定会 return 一个 Bool? 类型(可选 Bool)这将是可选的完美用例。但是,NSUserDefaults 是在 Swift 之前很长时间定义和编写的(它是 NextStep 的一部分)

您可以只使用 appSettings.boolForKey('iCloudOn') 而不使用 if let 来获取您的值。根据文档,如果没有值与键关联,则返回 false。

NSUserDefaults.boolForKey