我试图解析字典中的数据。我的代码目前有效,但我认为有一种更简洁的方法可以做到。
我的词典可以与我有三个选项
let dictionary:[String:Any] = ["pic":"picture"] //opt1
let dictionary:[String:Any] = ["pic":2] //opt2
let dictionary:[String:Any] = ["pi":"this"] //opt3
这是我目前用来解析我想要改进的数据的代码。
let _pic = dictionary["pic"]
if _pic != nil && !(_pic is String) {
print("error")
return
}
let pic = _pic as? String
对于每个选项,我希望发生不同的事情:
opt1
pic:String? = Optional(picture)
opt2 要显示的错误
opt3
pic:String? = nil
答案 0 :(得分:1)
你可以试试这个,
guard let _pic = dictionary["pic"] as? String else { return }
答案 1 :(得分:0)
let _pic = dictionary["pic"]
默认情况下,这为_pic
提供Any?
类型的可选值。因此,根据您的要求,您的代码似乎没问题,我认为您不需要最后一行let pic = _pic as? String
答案 2 :(得分:0)
我认为你需要做两次测试。这是一种方式:
guard let picAsAny = dictionary["pic"]
else { /* No key in the dictionary */ }
guard let pic = picAsAny as? String
else { /* error wrong type */ }
// pic is now a (nonoptional) string
显然,根据上下文,你可以使用if语句而不是guards。