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!")
}
此时就不会再字段不存在时崩掉了。
转载于:https://www.cnblogs.com/PaulpauL/p/5823610.html
Swift中字典解析后的问题,!?两种拆包的差别相关推荐
- python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- Swift中实现用户输入防抖动的两种方法
功能需求 用户通过App搜索服务器中的数据,当用户在搜索框中输入关键字时,要求App将关键字通过网络连接传递到服务器接口,并返回服务器的搜索结果. 这里有个问题:假设用户最终想要输入的关键字为pand ...
- swift 中跳转web view的两种方法
首先 遵循代理 引入头文件 #import <WebKit/WebKit.h> 第一种情况 直接跳转 了解不含特殊字符的 import UIKit class NewsViewCon ...
- java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...
[填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...
- DLL中导出函数的声明有两种方式
本文引用自:VC编程时DLL中导出函数的声明有两种方式 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链 ...
- 启用物料账后,有两种物料价格确定方式
启用ML后,有两种物料价格确定方式: 1.Cost Estimate 原材料和商品比较适合采用Cost Estimate,通过后台配置指定估价变式以确定未来标准价的获取 策略,如近期采购价,力求最接近 ...
- 移动端采用Flexible将PX转换REM适配及开发中Retina屏1px边框的两种解决方案
移动端采用Flexible将PX转换REM适配及开发中Retina屏1px边框的两种解决方案 说明:两个方案均基于Webpack构建. 方案一: 搭建环境及相关配置 webpack 3,需要loade ...
- java数组循环扩容_Java中实现数组动态扩容的两种方法
Java中实现数组动态扩容的两种方法 java中初始化一个数组需要定义数组的容量,而在我们使用数组时往往会遇到数组容量不够的情况,此时我们就需要通过动态扩容的方式来来根据需求扩大数组的容量. 我们可以 ...
- SAP 启用物料账后,有两种物料价格确定方式
更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical 启用ML后,有两种物料价格确定方式: 1.Cost Estimate 原材料和商品比较适合采用Cos ...
最新文章
- 关于华为虚拟操作键收起后页面高度不会刷新问题的总结
- (0053)iOS开发之沙盒(sandbox)机制和文件操作(三)
- 学习搭建Hadoop+HBase+ZooKeeper分布式集群环境
- 从“架构师书单”讲开去
- 加速SaaS规模化演进,餐道基于K8s的云上创新底座
- 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-
- 牛客网(剑指offer) 第十八题 二叉树的镜像
- javascript --- typeof方法和instanceof方法
- SQL SERVER两种分页的存储过程介绍
- linux如何调试脚本文件目录,如何在Linux下调试Bash Shell脚本的方法
- Android应用程序管理系列(四)—— packagemanager flags 与 packageInfo
- R语言_驾驶员事故预测
- Mac 显示和隐藏文件
- 如何开发一个基于Docker的Python 应用
- 易语言皮肤模块200个_S7200 SMART 模拟量模块种类amp;选型须知
- Hungry for your love 真爱无限
- C语言笑谈:C语言超级搞笑的代码,冷笑话我们程序员也会讲的啊!
- 关于语音会议自动记录的大概设计思路
- JMF环境配置(Eclipse)
- 外包公司的客户应该如何写需求文档?