Swift复习知识点记录(Swift4 Version)

Swift开始写的时候是1.0-2.0期间,之后一直写OC,再次使用Swift工作的时候会生疏或者不熟悉变化,这篇文章目的是复习Swift且记录一些3.0-4.0的变化,没有基础,只有一些生疏的点

if 判断只能bool

if 0 {}这种不行了

??句式

类似条件判断句式,只不过判断的是可选值是否为nil

Switch

可以用let x where这种方法判断

每个case如果执行了不会继续执行下面的case,所以不用每个都写一个 break

repeate while

do while类似,无论如何都会执行一次的循环

..<和…

..<不包含后面最大值 …两个值都包含

数组里的例子

func的参数和返回

参数可以起别名,比如name是person参数别名,返回可以用元祖返回多个结果

func嵌套

func实现嵌套在另一个func内部

func作为另一个func的返回值

func作为另一个func的参数

closure的一个例子,map

简写,省略参数和closure返回值

简写,省略参数和in句式和closure返回值

closure作为方法最后一个参数时,可以提到方法圆括号外面,就一个参数时,可以省略圆括号

 

Class和继承例子

“Every property needs a value assigned—either in its declaration (as with numberOfSides) or in the initializer (as with name).

子类一般initializer需要几步

1 Setting the value of properties that the subclass declares.
2 Calling the superclass’s initializer.
3 Changing the value of properties defined by the superclass. Any additional setup work that uses methods, getters, or setters can also be done at this point.

计算属性

ENUM

独特的写法是可以一行定义多个,且可以在枚举里面得到rawValue,实现func

也可以用rawValue找到指定值

associate值

关联值比较实用,比如一个买卖stock的方法,一个包含买和卖的传统枚举,分别为0和1,那么购买方法本来是这样的

利用关联值可以解放方法,调用起来的时候更简单,初始化枚举的时候就传入值好了

判断associate值的例子

enum里面也可以定义方法,举个例子,用switch case来指定case对应的行为

给enum里面添加计算属性

 

protocol

//和OC类似,实现协议,定义了协议的属性和方法,那么尊写这个协议的类就要实现协议中的属性和方法

protocol用于保护

extension

Error Handling

一种方式是do catch处理

或者简单点儿

Generics(泛型)

这个OC以前没有,简单的例子,Item可以任何类型,不用因为参数类型不一样写多个函数重复造轮子了

typealiases

Optionals

非Optionals值不可以设置nil

没设置初始值的optionals默认为nil

Optional binding(if let)

代替强制unwrap的句式,用于option value 是否为空

 Implicitly Unwrapped Optionals(隐式可选值)

简单地说一个类声明一个属性为可选值且一定会有初始值,那么用的时候每次都得!很麻烦,所以对于初始化一定有值,且使用过程中一定不会为nil的属性可以用隐式可选,生命的时候在类型后面加上叹号,取值的时候就不用加叹号了

 Closure设置属性默认值

闭包结尾的大括号后面接了一对空的小括号。这是用来告诉 Swift 需要立刻执行此闭包。如果你忽略了这对括号,相当于是将闭包本身作为值赋值给了属性,而不是将闭包的返回值赋值给属性。

注意:
如果你使用闭包来初始化属性的值,请记住在闭包执行时,实例的其它部分都还没有初始化。这意味着你不能够在闭包里访问其它的属性,就算这个属性有默认值也不允许。同样,你也不能使用隐式的self属性,或者调用其它的实例方法。

String

取范围值,返回一个可选值,自动判断越界