Swift中字典解析后的问题,!?两种拆包的差别

给出一个json,使用SwiftyJSON解析传给model,传进去是个字典,字典里有StringNSNumberNSDoctionary,和NSArray

正常情况下直接使用下面的解析方法即可:

id= dict.objectForKey("id") as!NSNumber

注意,此时是在正常情况下,即“id”对应是有value的,但问题是如果后台出错了,或请求出错了,返回的字典里没有这个字段了,或改名字了,那么这句话会静静的崩掉。

也许你已经注意到了,这句代码中使用了一个符号,就是as后面的“!”,“!”是什么意思呢?个人理解是:强制解包,解包不成功就崩掉。所以使用!要特别小心。

为什么要解包?这源于Swift的新特性,类型推断,字典里的值到底是什么类型,Swift会进行猜测,如果要接收的对象的类型正好是Swift推断的类型,那么就会赋值成功,否则就会提示错误。

与“!”相近的有一个“?”,它也是拆包的,但是不同的是,不是强制拆包,如果拆包失败,就会返回一个nil给接受对象。这样就保证了赋值安全。例如下面判空一个数组:

var item:NSMutableArray?

item = dict["items"]?["items1"] as? NSMutableArray

if item !=nil

{

        dictionary_selected = dict["items"]!["items1"] as! NSMutableArray

}

else

{

        print("empty array!")

}

此时就不会再字段不存在时崩掉了。


******

后面的内容与标题无关 推广下个人开发的APP 觉得还不错的 自己自己偷偷用就行了

密码口袋

Swift中字典解析后的问题,!?两种拆包的差别_第1张图片



Swift中字典解析后的问题,!?两种拆包的差别_第2张图片

你可能感兴趣的:(Swift中字典解析后的问题,!?两种拆包的差别)