【WIP】Swift4 异常处理, JSON处理
创建: 2018/03/24
更新: 2018/06/05 补充catch可以只带where不带模式
【任务表】TODO
| 异常处理语法 | |||||||||||||||||||||
| 异常的发生 |
抛出例外 thorw 式 ● 抛出的值的类型必须采用Error协议, 定义可抛出函数时不用声明抛出值类型(同一个函数内也可以抛出不同类型的) 是空协议 public protocol Error {
抛出值的类型的例 enum SampleError1: Error { // 抛出值类型的例
● 声明可能抛出异常的函数, 在参数表(...)后面加上throws // throws 记在参数表 [()] 后面, 返回值 [ -> 类型] 前面 func sample() thorws // 不带参数和返回值 func sample(a: Int, b: Int) throws // 不带返回值 func sample(mode: Mode) throws -> Bool // 带参数和返回值 ● 声明可能抛出异常的构造函数 init(...) throws // 和函数一样, 只不过构造函数不写返回值 |
||||||||||||||||||||
| 异常的传播与捕捉 |
遇到抛出异常, 一层层往上抛, 直到遇到可以catch自己的catch ● 呼出可抛出异常的函数的, 如果能catch所有可能的异常就是普通函数 如果不能catch, 则自身也是可抛出异常的函数. 要带throws |
||||||||||||||||||||
| 呼出会抛出异常的函数的方法 |
呼出会抛出异常的都必须带try try 可抛出异常的函数 没有异常则和平常一样, 抛出异常则往上一次抛. 这么呼出的, 自身也是抛出异常的函数 ● do-catch do {
catch所有可能的错误的话, 自身是普通函数。否则为会抛出异常的函数 ● try? 没有异常返回正常返回值, 异常返回nil 少用, 不好确定错误 ● try! 相当于作为不会抛出异常的函数来呼出 发生异常程序停止, 尽量不用 |
||||||||||||||||||||
| do-catch |
do {
● 不带默认( catch {...} ) 的则不匹配往外throw错误 不带默认的catch内部用error来获取错误 |
||||||||||||||||||||
| try?与try! |
● try? 没抛出错误则和普通函数一样, 发出错误则为nil. 返回型为T的, 用try则返回T? 用法: if let result = try? getReslt(mode: Mode.sample) { # if-let
● try! 没抛出错误和普通函数一样, 抛出错误则程序报错并停止运行 |
||||||||||||||||||||
| 会抛出错误的可选型函数与try? | 返回值为T??型 | ||||||||||||||||||||
| 终止处理与收尾处理 | |||||||||||||||||||||
| 访问控制 | |||||||||||||||||||||
| 断言(assertion)与测试 | |||||||||||||||||||||
| 可利用条件与预处理控制 | |||||||||||||||||||||
| 实例的序列化 | |||||||||||||||||||||
| 概念 |
把数据转为比特列 serialize / encode(特指内容方面) / archive(存入文件为目的) 比特列转为数据: deserialize / decode / unarchive |
||||||||||||||||||||
| 协议 |
|
||||||||||||||||||||
【WIP】Swift4 异常处理, JSON处理的更多相关文章
- 【WIP】Ruby JSON
创建: 2018/03/22 以后有空补上 注: JSON.generate 参数只能是Obejct或者Array, 不可以是Hash https://docs.ruby-lang.org/ja/la ...
- 去哪找Java练手项目?
经常有读者在微信上问我: 在学编程的过程中,看了不少书.视频课程,但是看完.听完之后感觉还是不会编程,想找一些项目来练手,但是不知道去哪儿找? 类似的问题,有不少读者问,估计是大部分人的困惑. 练手项 ...
- python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换
python进程中的实例和json格式的字符串之间的映射关系是非常直接的,相当于同一个概念被编码成不同的表示: stream in json form ----json.loads(str)----- ...
- Swift4 Json
swift4 带来了原生的json解析,它们分别是 JSONDecoder和JSONEncoder,使用起来还算方便,不过为了更方便,我把它们又进行了简单的封装: class JsonHelper { ...
- json等序列化模块 异常处理
今日学习内容如下: 1.序列化模块 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现 ...
- SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...
- HandlerExceptionResolver统一异常处理 返回JSON 和 ModelAndView
统一异常处理类的两种方式一种是前后分离,一种是一整套集合返回指定到指定的错误页面显示错误信息 1.由于前后分离,是统一返回JSON的格式 自定义Exception public class Bussi ...
- JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器
1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...
- springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON
思路: 加一个拦截器,在preHandler中取得HandlerMethod,判断其方法的返回类型,以及方法的注解和类的注解. 如果返回是json,收到异常则返回默认的异常包装类型. 如果返回是页面, ...
随机推荐
- gitlab上fork的项目如何获取源更新
1.添加上游项目地址 git remote add upstream URL 2.查看远程仓库信息 可以看到上游项目地址已经添加进来了 git remote -v 3.获取上游项目更新 获取到的更新会 ...
- 通过简单的两数相加体会hashmap的好处
目录 引入题目:两数相加 HashMap相关知识: Map集合 Map集合的特点 Map常用子类 HashMap集合 LinkedHashMap集合 Map集合的常用方法 Map集合的第一种遍历方式: ...
- 【APUE】线程与信号
每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.进程中的信号是递送到单个线程的. 线程中pthread_sigmask函数类似与进程的sigprocmask函数,可以用来阻塞信号. ...
- topcoder srm 551
div1 250pt 题意:一个长度最多50的字符串,每次操作可以交换相邻的两个字符,问,经过最多MaxSwaps次交换之后,最多能让多少个相同的字符连起来 解法:对于每种字符,枚举一个“集结点”,让 ...
- 【转】Linux下添加新硬盘,分区及挂载
原文:http://blog.chinaunix.net/uid-25829053-id-3067619.html ------------------------------------------ ...
- 重载和重写在jvm运行中的区别(一)
1.重载(overload)方法 对重载方法的调用主要看静态类型,静态类型是什么类型,就调用什么类型的参数方法. 2.重写(override)方法 对重写方法的调用主要看实际类型.实际类型如果实现了该 ...
- 每天一个JavaScript实例-获取元素当前高度
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 将Python打印的内容进行高亮的输出
将打印的内容进行高亮的显示 内容: 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: "\033[41;36m something he ...
- HDOJ 4455 Substrings 递推+树状数组
pre[i]第i位数往前走多少位碰到和它同样的数 dp[i]表示长度为i的子串,dp[i]能够由dp[i-1]加上从i到n的pre[i]>i-1的数减去最后一段长度为i-1的断中的不同的数得到. ...
- UIwebView缩放
首先就是需要让webView去设置下可以支持缩放 [__webView setScalesPageToFit:YES]; 如果网页支持缩放只需要上面的一句就可以了.你可以加在谷歌的试一下,但是你要加在 ...