gpt4 book ai didi

swift - 守卫不展开可选

转载 作者:IT王子 更新时间:2023-10-29 05:48:32 26 4
gpt4 key购买 nike

我正在尝试处理一个 JSON 对象,使用 guard 语句将其解包并转换为我想要的类型,但该值仍被保存为可选值。

guard let json = try? JSONSerialization.jsonObject(with: data) as? [String:Any] else {
break
}

let result = json["Result"]
// Error: Value of optional type '[String:Any]?' not unwrapped

我是不是漏掉了什么?

最佳答案

try? JSONSerialization.jsonObject(with: data) as? [String:Any]

被解释为

try? (JSONSerialization.jsonObject(with: data) as? [String:Any])

这使它成为 [String:Any]?? 类型的“双重可选”??。可选绑定(bind)只删除一层,因此 json 具有类型 [String:Any]?

问题通过设置括号解决:

guard let json = (try? JSONSerialization.jsonObject(with: data)) as? [String:Any] else {
break
}

只是为了好玩:另一个(不太明显?,混淆?)解决方案是使用带有双重可选模式的模式匹配:

guard case let json?? = try? JSONSerialization.jsonObject(with: data) as? [String:Any] else {
break
}

关于swift - 守卫不展开可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com