swift 4.2 官方文档学习笔记(一)- 基础内容(下)

Sellen Wei
4 min readDec 10, 2018

--

继续承接上文:swift 4.2 官方文档学习笔记(一)- 基础内容(上)

12.typealias 类型转换,这个偶尔会用到 使用 sellenType = Int16 这种方式,可以将原有的类型匹配到一个自定义名称的类型上,这也叫做别名

13.前面有提到元祖(tuples)的概念,这里来学习下什么是元祖

用平常我们经常看到的 “404 Not Found” error,我们可以写成一个元祖,包括Int 和String两个类型:

let http404Error = (404, “Not Found”)

//任何类型的排列都可以被用来创建一个元组,他可以包含任意多的类型。例如 (Int, Int, Int) 或者 (String, Bool) ,实际上,任何类型的组合都是可以的。

或者可以将元组的类型进行拆解:

let (statusCode, statusMessage) = http404Error

//将(Int,String)的元组拆解成两部分,statusCode代表Int部分,statusMessage代表String部分

let (justTheStatusCode, _) = http404Error //当你分解元组的时候,如果只需要使用其中的一部分数据,不需要的数据可以用下滑线( _ )代替

或者用index数字来调用元组中的元素

print(“The status code is\(http404Error.0)”)

或直接在定义时命名:

let http200Status = (statusCode: 200, description: “OK”)

以前从来没想过元祖的使用,其实在多返回值的函数(return多个值),这个是非常实用的!估计也是元组最大量使用的位置。

14.nil: 这个是swift中非常常见的一个概念,但是看了官方文档后发现和理解的不太一样,在swift中nil指的是value/certain type的缺失,Optionals of any type can be set to nil, not just object types. 在objc中,他只是表示一个指向不存在的object的指针。

15. Implicitly Unwrapped Optionals: 其实概念也非常简单,使用String!而不是String?来声明一定不是optional的变量,叫做隐性的unwrap,因为他虽然没有unwrap一个optional value,但是他在声明的时候隐性的告诉你了这个信息。从此以后,这个变量永远不可能被改写为nil。

16.错误处理:这个以后的章节会详细讲,简单来说就是有可能会throw exception的函数,通过do try catch来运行,可以有效的抓取错误而不导致程序的崩溃。

17.Assertions and Preconditions: assert表示断言的意思,也就是通过一定条件,满足则继续执行程序,不满足则马上终止程序,使用方法有两种:

let age = -3

assert(age >= 0, “A person’s age cannot be less than zero”)

//第二种使用方法assertFailure

if age > 10 {

print(“You can ride the roller-coaster or the ferris wheel.”)

} else if age > 0 {

print(“You can ride the ferris wheel.”)

} else {

assertionFailure(“A person’s age can’t be less than zero.”)

}

后面的注释可加可不加,加的好处是在调试的过程中能够很快找到assert的位置,从而判断错误点,这个我在工作当中还没有用到过,不过在第三方的cocoapod中有看到过,好处应该就是当错误发生时,程序可以马上停止执行,进行debug

另一种precondition的做法非常类似:

precondition(index > 0, “Index must be greater than zero.”)

或者使用:preconditionFailure(_:file:line:)

也是当条件不满足时,终止程序。

另外,fetalError也可以用来终止程序,但由于它自身没有判断条件,所以需要和if搭配使用。

--

--