我在NSUserdefaults中有一个值,每次运行代码时都会打印“Optional(”value“)” 我在搜索中尝试了几种解包技术和许多例子 但似乎没有什么能解决我的问题
代码
let SaveData = NSUserDefaults.standardUserDefaults()
if(SaveData.valueForKey("newString") != nil){
print(SaveData.valueForKey("newString") as! String!)
print(SaveData.valueForKey("newString") as! String)
print(SaveData.valueForKey("newString")!)
// SD.executeChange("INSERT INTO \(ImageIs)Array (\(ImageIs)) VALUES ('\(abc)')")
SaveData.setValue(nil, forKey: "newString")
}
答案 0 :(得分:2)
所以,不是检查某些东西是否为nil
,然后当你发现它不是时,你们都强制展开并强制施放它,我们可以使用可选的绑定来安全地拉出这个值以及正确的NSUserDefaults
方法:stringForKey(_:)
:
if let data = NSUserDefaults.standardUserDefaults().stringForKey("newString") {
print(data)
}
但是,你的第二个&第三次尝试不应该将字符串显示为可选。这个游乐场有效地展示了与NSUserDefaults
在这里做的完全相同的事情。
func optionalFunc() -> Any? {
return "Hello world."
}
print(optionalFunc())
/* unsafe */ print(optionalFunc() as! String!) /* unsafe */
/* unsafe */ print(optionalFunc() as! String) /* unsafe */
/* unsafe */ print(optionalFunc()!) /* unsafe */
if let unwrapped = optionalFunc() as? String {
print(unwrapped)
}
如您所见,只有第一种情况打印Optional("Hello world.")
字符串。