ios - NSUserDefaults boolForKey

标签 ios swift nsuserdefaults

我正在尝试让 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/

相关文章:

ios - 在 NSUserdefault swift 中存储结构

ios - NSUserDefaults standardUserDefaults 对象被随机删除

iphone - 缩放时 UIView 未检测到触摸

ios - 从 UITextField(HEX) 数据获取输入并通过蓝牙 LE 发送出去

xcode - 在 Swift 中获取 UIPickerView 控件的选定值

ios - 快速水平和垂直对齐图像

ios - 保存和读取图像阵列

ios - 即使已取消并设置为Nil,Swift iOS -DispatchWorkItem仍在运行

ios - 一部手机上有 2 个相同的应用程序?

iphone - UIImageview 上的 UIRotationGestureRecognizer