我正在尝试让 NSUserDefaults 在我的应用程序中工作。下面的代码应该检查 NSUserDefaults 中是否有一个名为“iCloudOn”的 bool 值。如果存在,它将 UISwitch 的值分配给 NSUserDefault。如果没有,它将继续并将 false 分配给 NSUserDefault。
我已经标记了出现错误的行。我收到的错误是“条件绑定(bind)中的绑定(bind)值必须是可选类型。”我不知道为什么会收到此错误以及我需要做什么才能使它正常工作。谁能帮忙解释一下?
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
函数不返回可选值。它总是返回 true 或 false。如果 key 在用户默认值中不存在,则返回 false。
您应该使用返回 AnyObject?
的 objectForKey,然后将其转换为 Bool
。
编辑:
如果今天为 Swift 编写此函数,它几乎肯定会返回 Bool?
类型(可选 Bool)这将是可选的完美用例。然而,NSUserDefaults 是在 Swift 之前很长时间定义和编写的(它是 NextStep 的一部分)
关于ios - NSUserDefaults boolForKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32280718/