创建: 2018/03/24

更新: 2018/06/05 补充catch可以只带where不带模式

【任务表】TODO

异常处理语法
 异常的发生

抛出例外

thorw 式

抛出的值的类型必须采用Error协议, 定义可抛出函数时不用声明抛出值类型(同一个函数内也可以抛出不同类型的)

是空协议

public protocol Error {
} extension Error {
}

抛出值的类型的例

enum SampleError1: Error { // 抛出值类型的例
case asSimpleResultA, asSimpleResultB
case asString(String)
case asNumer(Int)
}

● 声明可能抛出异常的函数, 在参数表(...)后面加上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 {
...
try 可抛出异常的函数
...
} catch {
...
}

catch所有可能的错误的话, 自身是普通函数。否则为会抛出异常的函数

● try?

没有异常返回正常返回值, 异常返回nil

少用, 不好确定错误

● try!

相当于作为不会抛出异常的函数来呼出

发生异常程序停止, 尽量不用

 do-catch
do {
...
try ... # 呼出会抛出异常的函数/构造函数
...
} catch pattern where ... { // pattern和where都可以省略, 可以只有pattern或者where
...
} catch ... { // catch可以有多个
...
} catch { // 最后一个接上面都不匹配的
...
}

● 不带默认( 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

 协议

序列化 Encodable

必须方法

 

func encode(to: Encoder) throws

● 参数需要采用了Encoder协议

   
 解序列化 Decodable

必须方法

 

init(from: Decoder) throws

● 参数需要采用了Decoder协议

   
   
 Codable

typealias Codable = Decodalbe & Encodable

Swift的基本数据类型(Int, String等)都采用了Codable

基本数据类型为元素的数组,哈希表,集合等也采用了Codable

构造体的所有容纳型属性都采用Codable的话, 此构造体也可以直接采用Codable 

struct Samle: Codable {
var sample: [Int] {
return []
}
}
   
   
   
   
   
   
   
   
   
   

【WIP】Swift4 异常处理, JSON处理的更多相关文章

  1. 【WIP】Ruby JSON

    创建: 2018/03/22 以后有空补上 注: JSON.generate 参数只能是Obejct或者Array, 不可以是Hash https://docs.ruby-lang.org/ja/la ...

  2. 去哪找Java练手项目?

    经常有读者在微信上问我: 在学编程的过程中,看了不少书.视频课程,但是看完.听完之后感觉还是不会编程,想找一些项目来练手,但是不知道去哪儿找? 类似的问题,有不少读者问,估计是大部分人的困惑. 练手项 ...

  3. python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换

    python进程中的实例和json格式的字符串之间的映射关系是非常直接的,相当于同一个概念被编码成不同的表示: stream in json form ----json.loads(str)----- ...

  4. Swift4 Json

    swift4 带来了原生的json解析,它们分别是 JSONDecoder和JSONEncoder,使用起来还算方便,不过为了更方便,我把它们又进行了简单的封装: class JsonHelper { ...

  5. json等序列化模块 异常处理

    今日学习内容如下: 1.序列化模块 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现 ...

  6. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...

  7. HandlerExceptionResolver统一异常处理 返回JSON 和 ModelAndView

    统一异常处理类的两种方式一种是前后分离,一种是一整套集合返回指定到指定的错误页面显示错误信息 1.由于前后分离,是统一返回JSON的格式 自定义Exception public class Bussi ...

  8. JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器

    1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...

  9. springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON

    思路: 加一个拦截器,在preHandler中取得HandlerMethod,判断其方法的返回类型,以及方法的注解和类的注解. 如果返回是json,收到异常则返回默认的异常包装类型. 如果返回是页面, ...

随机推荐

  1. msp430项目编程30

    msp430中项目---电压检测系统 1.SVS工作原理 2.电路工作原理 3.代码(显示部分) 4.代码(功能实现) 5.项目总结

  2. 网络安全法与LogSec日志安全大数据审计平台

    https://blog.csdn.net/chengpeng1144/article/details/73555331 https://blog.csdn.net/dcbeyond/article/ ...

  3. Flatten Binary Tree to Linked List (DFS)

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...

  4. loj6157 A^B Problem (并查集)

    题目: https://loj.ac/problem/6157 分析: 这种树上异或,一般是采用分位考虑,但是这题即使分位,也会发现非常不好处理 这里考虑维护一个点到其根的路径的异或值 用并查集去检测 ...

  5. java-过滤器(Filter)

    在javaweb开发中,项目中都会包含一些过滤器(Filter),主要用于web服务器对资源的管理控制,如静态资源文件.jsp页面访问等.我们可以使用过滤器实现一些特殊的功能,如常见的过滤敏感词汇(替 ...

  6. 关键字检索高亮标出-javasript/jQuery代码实现

    原文:http://www.open-open.com/code/view/1454504432089 此方法传入2个参数,一个是被检索内容所在的表单或者HTML元素的ID,另一为关键字,多个关键字的 ...

  7. android手机rootROM下载地址

    https://download.mokeedev.com/ https://download.lineageos.org/

  8. IntelliJ IDEA 基本配置入门

    前言:今天下载安装IntelliJ IDEA.随手创建了一个项目,运行Build提示错误. 与大多数用于开发JAVA的IDE类似,不做不论什么配置.编译是不会成功的.因此我尝试对IDEA的配置进行了一 ...

  9. Codeforces Round #277 (Div. 2)---C. Palindrome Transformation (贪心)

    Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input sta ...

  10. Angular2.x

    Angular版本 Angular1和Angular4分别是Angular的两个版本,也就是Angular1.x和Angular2.x(除了Angular1以外,其余都属于Angular2.x). 1 ...