Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从NSUserDefaults发出展开字符串_Ios_Swift_Nsuserdefaults - Fatal编程技术网

Ios 从NSUserDefaults发出展开字符串

Ios 从NSUserDefaults发出展开字符串,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我试图从NSUserDefaults中获取一个值,并试图将一个变量设置为该值。问题是我不确定如何打开它 这是我的代码: var defaults = NSUserDefaults(suiteName: "group.AffordIt") currentBudgetCalculation = defaults?.stringForKey("currentBudgetWidget")! 目前,我只在第二行中得到一个错误,它指出: Value of optional type 'St

我试图从NSUserDefaults中获取一个值,并试图将一个变量设置为该值。问题是我不确定如何打开它

这是我的代码:

    var defaults = NSUserDefaults(suiteName: "group.AffordIt")
    currentBudgetCalculation = defaults?.stringForKey("currentBudgetWidget")!
目前,我只在第二行中得到一个错误,它指出:

Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
如果我尝试使用建议的解决方案,它只会添加一个
到行尾,但这显然不能解决问题

你试过这个吗

currentBudgetCalculation = defaults!.stringForKey("currentBudgetWidget")!
你试过这个吗

currentBudgetCalculation = defaults!.stringForKey("currentBudgetWidget")!

请注意,使用强制展开运算符
,因为如果可选选项为
nil
,则会生成运行时错误

更好的方法是使用可选绑定,这使代码更安全,更不容易出现异常,尤其是当您不确定可选变量是否实际包含非nil值时:

var defaults: NSUserDefaults? = NSUserDefaults(suiteName: "group.AffordIt")

if let defaults = defaults {
    if let currentBudgetCalculation: String = defaults.stringForKey("currentBudgetWidget") {
        // Here you are 100% sure currentBudgetCalculation contains a non nil value
    }
}
一般来说,我总是避免使用强制展开操作符
,除非是我从自己的代码中指定了一个非nil值,否则在函数或方法返回的内容上使用它可能会让人头疼,因为我想知道为什么应用程序会因未知原因崩溃。官方文件中提到了这一点,并附有注释:

尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请始终确保可选项包含非nil值!强制展开其值


请注意,使用强制展开运算符
,因为如果可选选项为
nil
,则会生成运行时错误

更好的方法是使用可选绑定,这使代码更安全,更不容易出现异常,尤其是当您不确定可选变量是否实际包含非nil值时:

var defaults: NSUserDefaults? = NSUserDefaults(suiteName: "group.AffordIt")

if let defaults = defaults {
    if let currentBudgetCalculation: String = defaults.stringForKey("currentBudgetWidget") {
        // Here you are 100% sure currentBudgetCalculation contains a non nil value
    }
}
一般来说,我总是避免使用强制展开操作符
,除非是我从自己的代码中指定了一个非nil值,否则在函数或方法返回的内容上使用它可能会让人头疼,因为我想知道为什么应用程序会因未知原因崩溃。官方文件中提到了这一点,并附有注释:

尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请始终确保可选项包含非nil值!强制展开其值


啊。您的答案几乎正确,但它是
currentBudgetCalculation=defaults!。stringForKey(“currentBudgetWidget”)我不得不等待时间限制到期,但我现在已经这样做了。谢谢很高兴能帮助你……)请注意,如果
默认值
为零,或者
currentBudgetWidget
没有值,或者无法将其强制转换为stringAh,则使用强制展开将导致应用程序崩溃。您的答案几乎正确,但它是
currentBudgetCalculation=defaults!。stringForKey(“currentBudgetWidget”)我不得不等待时间限制到期,但我现在已经这样做了。谢谢很高兴能帮助你……)请注意,如果
默认值
为零,或者
currentBudgetWidget
没有值,或者无法强制转换为字符串,则使用强制展开将导致应用程序崩溃