可选的绑定,然后转换为swift

时间:2017-03-03 11:09:05

标签: swift parsing optional

我试图解析字典中的数据。我的代码目前有效,但我认为有一种更简洁的方法可以做到。

我的词典可以与我有三个选项

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

3 个答案:

答案 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。