博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift中字典解析后的问题,!?两种拆包的差别
阅读量:4691 次
发布时间:2019-06-09

本文共 733 字,大约阅读时间需要 2 分钟。

给出一个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? NSMutableArrayif item != nil{    dictionary_selected = dict["items"]!["items1"] as! NSMutableArray}else{    print("empty array!")}

 

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

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

你可能感兴趣的文章
快速导入Excel数据到mysql
查看>>
编程之美,让美国人科技高速发展,浅谈C语言带给美国的变化
查看>>
Error querying database. Cause: java.lang.IllegalArgumentException:Failed to decrypt.(错误笔记)...
查看>>
关于Flutter
查看>>
实现页面图片阴影特效,jsp,asp,sql,php,mysql,server,apache,iis,tomcat,oracle,java,linux,dns
查看>>
jdbc、DBUtils
查看>>
一个关于vue+mysql+express的全栈项目(四)------ sequelize中部分解释
查看>>
数据库服务器监控取不到值
查看>>
Major Performance Impacts
查看>>
监督学习--k近邻算法
查看>>
Python 进程与线程
查看>>
【3-31】操作属性、元素、内容及定时器
查看>>
统计局的五级(省市区乡村)数据库支持 MS SQL SERVER 2005 和 MS SQL SERVER 2008
查看>>
软件测试
查看>>
[整理]在命令行执行 UIAutomation
查看>>
Overlapping Rectangles
查看>>
新浪IP库地址
查看>>
centos7 eclispe 编译C++遇到的问题总结
查看>>
1-ML的基本概念
查看>>
自动附加Sqlserver数据库
查看>>