Ios 粗活

Ios 粗活,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我正在尝试让NSUserDefaults在我的应用程序中工作。下面的代码用于检查NSUserDefaults中是否存在名为“iCloudOn”的bool值。如果存在,则会将UISwitch的值指定给NSUserDefault。如果没有,则继续并将false指定给NSUserDefault 我已经标记了我要获取错误的行。我收到的错误是“条件绑定中的绑定值必须是可选类型”。我无法理解为什么会出现此错误,以及需要执行哪些操作才能使其正常工作。有人能帮忙解释一下吗 class SettingsTable

我正在尝试让NSUserDefaults在我的应用程序中工作。下面的代码用于检查NSUserDefaults中是否存在名为“iCloudOn”的bool值。如果存在,则会将UISwitch的值指定给NSUserDefault。如果没有,则继续并将false指定给NSUserDefault

我已经标记了我要获取错误的行。我收到的错误是“条件绑定中的绑定值必须是可选类型”。我无法理解为什么会出现此错误,以及需要执行哪些操作才能使其正常工作。有人能帮忙解释一下吗

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

函数
boolforky
不返回可选值。它总是返回true或false。如果该键在用户默认值中不存在,则返回false

您应该使用objectForKey,它返回
AnyObject?
,然后将其强制转换为
Bool

编辑:
如果今天为Swift编写此函数,它几乎肯定会返回
Bool?
类型(可选Bool),这将是可选Bool的完美用例。但是,NSUserDefaults是在Swift之前很久定义和编写的(它是下一步的一部分)

函数
boolforky
不返回可选值。它总是返回true或false。如果该键在用户默认值中不存在,则返回false

您应该使用objectForKey,它返回
AnyObject?
,然后将其强制转换为
Bool

编辑:
如果今天为Swift编写此函数,它几乎肯定会返回
Bool?
类型(可选Bool),这将是可选Bool的完美用例。但是,NSUserDefaults是在Swift之前很久定义和编写的(它是下一步的一部分)

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


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