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


    给出一个json,使用SwiftyJSON解析传给model,传进去是个字典,字典里有String,NSNumber,NSDoctionary,和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!")
    }
    

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

    http://www.cnblogs.com/PaulpauL/ 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    大显示器有用了,看报纸很爽
    密码概率(转)
    什么是社会工程攻击(转)
    C# 在购物车系统中生成不重复的订单号[转]
    jQuery选择器总结[转]
    多种下拉框功能插件
    异步提交
    MVC3开发常常遇到的问题及常常使用到的代码片段
    MVC3怎样设置ntext字段?
    jQuery子页面刷新父页面局部刷新+整体刷新 [转]
  • 原文地址:https://www.cnblogs.com/PaulpauL/p/5823610.html
Copyright © 2020-2023  润新知