1.override
重写定义的前面加上 ''override'' 关键字,子类可以为继承来的实例方法,类方法,实例属性,类属性,或下标提供自己定制的实现。我们把这种行为叫重写。
2.final
防止它们被重写
说明
:final 关键字可以用在 class , func 或者 var 前面进行修饰,表示不允许对该内容进行继承或 者重写操作。
3.inout
输入输出参数
4.mutating
使用 mutating 关键字修饰方法是为了能在该方法中修改 struct 或是 enum 的变量
5. !
1.'!' 强制解包 一定要获取一个值 不能够为nil。
2.'!' 强制解包有风险,需要谨慎使用,程序员需要对'!'负责 如果为nil 程序会崩溃,一定要考虑是否安全 一定有值 防患于未然。
6. ?
'?' 可选解包 后面具体说,如果可选类型要进行计算的时候,系统会报错,需要程序员手动处理可选类型。
7.??
'??' 合并空选项 必须提高 ?? 的优先级
8.convenience
构造遍历器关键字
9.required
必须实现
10. deinit
deinit:析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
注释和OC中的dealloc 一样的,通常在deinit和dealloc中需要执行的操作有:
对象销毁、KVO移除、移除通知、NSTimer销毁。
11.is 类型检查操作符
is 来检查一个实例是否属于一个特定的子类。如果实例是该子类类型,类型检查操作符返回true,否则返回false。
12.as?
条件形式的类型转换操作符,作用:返回一个你将要向下类型转换值的可选项。
13.as!
强制形式类型转换操作符,作用:向下类型转换和强制展开结合为一个步骤。
14.AnyObject
注释:可以表示任何类型的实例
15.Any
注释:可以表示任何类型,包括函数类型。
16.extension
注释:
一、基本解释
1.扩展为现有的类、结构体、枚举类型、或协议添加了新功能。也就是所谓的逆向建模
,包括可以对无权限的源码进行扩展类型的能力。
2.extension与oc中的category类似。不同之处就是没有扩展名字。
二、功能和用途
1.添加计算实例属性和计算类型属性。
2.定义实例方法和类型方法。
3.提供新初始化器。
4.定义和使用新内嵌类型。
5.使现有的类型遵循某协议。
三、注意事项
扩展可以向一个类型添加新的方法,但是不能重写已有的方法。
17.optional
可选要求使用 optional 修饰符作为前缀放在协议的定义中
18.@objc
可选允许你的代码与 oc进行通信操作。 协议可选要求必须使用 @objc 标志标记。注意 @objc 协议只能被继承自 oc 类或 其他 @objc 类采纳。它们不能被结构体或者枚举采纳。
19._
当我们觉着某些参数可以选择性的忽略,就可以使用
_
代替要忽略的那个值。
20.associatedtype
关联类型通过该关键字来指定。定义一个协议时,有时在协议里声明一个或多个关联类型是很有用的。关联类型给协议中用到的类型一个占位符名称。直到代表的实际类型在协议被采纳时才会被指定。
21. typealias
用来为已经存在的类型重新定义名字的,与oc中的
typedef
有点类似。
22. throws
抛出错误
23. import
一个模块可以使用 import 关键字导入另外一个模块
24. open
公开权限, 最高的权限, 可以被其他模块访问, 继承及复写。只能用于类和类的成员。
25. public
公有访问权限,类或者类的公有属性或者公有方法可以从文件或者模块的任何地方进行访问。public 的权限在 Swift 3.0 后无法在其他模 块被复写方法/属性或被继承。
26. internal
internal 是
内部
的意思,即有着 internal 访问权限的属性和方法说明在模块内部
可以访问, 超出模块内部就不可被访问了。在 Swift 中默认就是 internal 的访问权限。
27. fileprivate
文件私有访问权限
,被该关键字修改的属性或者方法可以在同一个物理文件中访问。超出该物理文件,属性和方法就不能直接被访问。
28.private
私有访问权限
,修饰后的类、属性、方法可以在同一个物理文件中的同一个类型(包含 extension)访问。如果超出该物理文件或不属于同一类型,就不能被访问。
29. @discardableResult(字面意思就是”可以忽略“)
1.swift正常的方法如果有返回值的话,调用的时候必须有一个接收方,否则的话编译器会报如下警告。
2.如果在方法前加上 @discardableResult 不处理的时候就不会有警告了。也可以用一个通配符_
接收方法返回值,可以达到同样的目的。
30.
注意事项:
1.如果一个类的访问级别是
fileprivate
或者private
那么该类的所有成员都是fileprivate
或者private
的访问权限。(此时成员无法修改访问级别)。
2.如果一个类的访问级别是open
、internal
或者public
那么它的所有成员都是internal
,类成员的访问级别不能高于类的访问级别
。(注意:嵌套类型的访问级别也符合这个规则。)
3.常量、变量、属性、下标脚本访问级别低于声明的类型级别,并且如果不是默认访问级别(internal
)要明确声明访问级别。例如:一个常量是private
,那么该常量必须声明为private 或 fileprivate
类型。
4.在不违背1、2、3潜规则的情况下,setter 访问级别可以低于getter级别。(例如:假如一个属性访问级别是internal
,那么可以添加private(set)
修饰将setter权限设置为private
,在当前模块中只有此源文件可以访问,对外部都是只读的。)
5.必要构造方法(required 修饰)
的访问级别必须和类
访问级别相同,结构体的默认逐一构造函数的访问级别不高于其成员的访问级别。例如一个成员是 private 那么这个构造函数就是 private,但是可以通过自定义来声明一个 public 的构造函数。
31.@noreturn
表示调用这个方法的话可以不再需要返回值,因为 程序整个都将终止。
32.@noescape
noescape是非逃逸的意思。@noescape关键字代码中扮演了一个标注的作用:来说明一个闭包参数,该闭包参数与此API是同步的,它只在此API中被调用。只要该API运行结束,该闭包的生命周期就结束。