我有一个JSON对象,其中包含一些字典和数组,如下所示
let stats = screendata["stats"]! as? NSDictionary
现在,当我尝试从中获取字典时,它会为我提供一个可选字典,以便如何删除这个可选字词?
print(stats!["reward_listing"]! as? NSDictionary)
这是我得到的输出
Optional({
"btn_label" = "905 points to go";
description = "Free any size drink at Starbucks";
id = 1;
price = "1000 Points";
status = disable;
title = "Free any size drink at Starbucks";
})
请指导我如何删除此可选字词?
答案 0 :(得分:3)
您使用强制解包screendata["stats"]
是正确的,但是然后使用as?
运算符强制转换为NSDictionary
。 as?
返回一个可选项,如果转换失败则返回nil
。您可以将两个步骤合并为一行:
let stats = screendata["stats"] as! NSDictionary
这将转换为NSDictionary
和强制解包。话虽如此,您应该将!
视为“请立即崩溃”运算符,并使用更安全的if let
代替:
if let stats = screendata["stats"] as? NSDictionary {
print(stats)
} else {
//either `screendata` had no entry for "stats" or it wasn't an `NSDictionary`
print("Couldn't unwrap.")
}
答案 1 :(得分:1)
如果您确定它始终是NSDictionary,则可以使用as!
代替as?
这可以解决问题。
但更好的方法是使用if-let语句打开它:
if let listing = stats!["reward_listing"] as? NSDictionary {
print(listing)
} else {
print("Failed to unwrap")
}
通常你应该摆脱惊叹号,因为它们经常会导致运行时出错。 使用if-let重写你的第一个语句。
答案 2 :(得分:0)
试试这个 -
guard let stats = screendata["stats"] as? NSDictionary
else
{
// Value requirements not met, do something
return
}
// Do stuff with stats
答案 3 :(得分:-2)
StandardScaler
用这个替换它将删除可选。 !代表必需,这意味着总会有一些值。