给出一个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!")
}

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

转载于:https://www.cnblogs.com/PaulpauL/p/5823610.html

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

  1. python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  2. python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  3. Swift中实现用户输入防抖动的两种方法

    功能需求 用户通过App搜索服务器中的数据,当用户在搜索框中输入关键字时,要求App将关键字通过网络连接传递到服务器接口,并返回服务器的搜索结果. 这里有个问题:假设用户最终想要输入的关键字为pand ...

  4. swift 中跳转web view的两种方法

    首先 遵循代理  引入头文件 #import <WebKit/WebKit.h> 第一种情况  直接跳转  了解不含特殊字符的 import UIKit class NewsViewCon ...

  5. java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...

    [填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...

  6. DLL中导出函数的声明有两种方式

    本文引用自:VC编程时DLL中导出函数的声明有两种方式 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链 ...

  7. 启用物料账后,有两种物料价格确定方式

    启用ML后,有两种物料价格确定方式: 1.Cost Estimate 原材料和商品比较适合采用Cost Estimate,通过后台配置指定估价变式以确定未来标准价的获取 策略,如近期采购价,力求最接近 ...

  8. 移动端采用Flexible将PX转换REM适配及开发中Retina屏1px边框的两种解决方案

    移动端采用Flexible将PX转换REM适配及开发中Retina屏1px边框的两种解决方案 说明:两个方案均基于Webpack构建. 方案一: 搭建环境及相关配置 webpack 3,需要loade ...

  9. java数组循环扩容_Java中实现数组动态扩容的两种方法

    Java中实现数组动态扩容的两种方法 java中初始化一个数组需要定义数组的容量,而在我们使用数组时往往会遇到数组容量不够的情况,此时我们就需要通过动态扩容的方式来来根据需求扩大数组的容量. 我们可以 ...

  10. SAP 启用物料账后,有两种物料价格确定方式

    更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical 启用ML后,有两种物料价格确定方式: 1.Cost Estimate 原材料和商品比较适合采用Cos ...

最新文章

  1. 关于华为虚拟操作键收起后页面高度不会刷新问题的总结
  2. (0053)iOS开发之沙盒(sandbox)机制和文件操作(三)
  3. 学习搭建Hadoop+HBase+ZooKeeper分布式集群环境
  4. 从“架构师书单”讲开去
  5. 加速SaaS规模化演进,餐道基于K8s的云上创新底座
  6. 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-
  7. 牛客网(剑指offer) 第十八题 二叉树的镜像
  8. javascript --- typeof方法和instanceof方法
  9. SQL SERVER两种分页的存储过程介绍
  10. linux如何调试脚本文件目录,如何在Linux下调试Bash Shell脚本的方法
  11. Android应用程序管理系列(四)—— packagemanager flags 与 packageInfo 
  12. R语言_驾驶员事故预测
  13. Mac 显示和隐藏文件
  14. 如何开发一个基于Docker的Python 应用
  15. 易语言皮肤模块200个_S7200 SMART 模拟量模块种类amp;选型须知
  16. Hungry for your love 真爱无限
  17. C语言笑谈:C语言超级搞笑的代码,冷笑话我们程序员也会讲的啊!
  18. 关于语音会议自动记录的大概设计思路
  19. JMF环境配置(Eclipse)
  20. 外包公司的客户应该如何写需求文档?

热门文章

  1. 如何在Mac上的Safari中启用或禁用自动更正?
  2. 苹果Mac强大的思维导图软件:MindNode 帮你轻松理清思路
  3. 如何一次为 Safari 中的所有标签添加书签?
  4. 如何在 Mac 上查找已保存的密码?
  5. mac效率工具alfred 4汉化版
  6. 如何在Mac上的一个“预览”窗口中显示若干文件
  7. mac下载站,这个可以收藏看看
  8. 什么是 iPhone 和 Mac 上的“优化电池充电”功能?
  9. 阿里巴巴如何基于 Kubernetes 实践 CI/CD
  10. 史上最浅显易懂的Git教程3 分支管理