1、常见关键字
let
:定义常量
var
:定义变量
typealias
:重命名已存在的类型,使代码更加清晰,但不适用于类型不确定的泛型。typealias和泛型接口
extension
:扩展,向一个已有的类、结构体或枚举类型添加新功能。功能类似OC的category,但没有具体名字。
associatedtype
:协议中定义泛型。关于associatedtype的使用说明
optional
:定义时只需在类型后面加上问号(?)就行了。关于optional的使用
internal
:默认级访问控制,可不写(open > public > interal > fileprivate > private)。访问控制
inout
:一般参数仅是在函数内可以改变的,函数执行完后变量就会被销毁,不会有机会改变函数以外的变量。关于inout的使用
lazy
:延时加载,可修饰变量和方法。关于lazy的使用说明
2、@noescape和@escaping
@noescape
:用来标记一个闭包。解决闭包“保留环”问题
@escaping
:逃逸闭包。swift3.0下闭包语法汇总
3、designated和convenience
designated
:构造函数init前的默认关键字,不加修饰的 init 方法都需要在方法中保证所有非 Optional 的实例变量被赋值初始化,而在子类中也强制 (显式或者隐式地) 调用 super 版本的 designated 初始化。
convenience
:必须调用同一个类中的 designated 初始化完成设置,只作为补充和提供使用上的方便。convenience 修饰的构造方法是不能被子类重写或者是从子类中以 super 的方式被调用的。
关于designated和convenience的使用
4、override和required
override
:重写父类的方法。
required
:只能用于修饰类初始化方法。
关于override和required的使用
5、weak和unowned
weak
:修饰的属性可为可选类型,用来防止循环引用。
unowned
:修饰的属性不能为可选类型,用来防止循环引用,必须在init中初始化。
关于weak和unowned的用法
6、willSet与didSet
willSet
:在新的值被设置之前调用,默认参数名称为newValue
。
didSet
:在新的值被设置之后立即调用,默认参数名称为oldValue
。
关于willSet与didSet的用法
7、mutating和nonmutating
mutating
:修饰方法是为了能在该方法中修改 struct 或是 enum 的变量。mutating关键字的使用
nonmutating
:
8、自定义运算符operator
operator
:自定义运算符。
prefix
:前置运算符
infix
:中间运算符
postfix
:后置运算符
associativity
:综合性。取值范围:left
、right
、none
。
precedence
:优先级。取值范围:0~255。
// 前置:返回2的n次方
prefix operator ^ {}
prefix func ^ (var vector: Double) -> Double {
return pow(2, vector)
}
println(^5) // 32.0
// 后置:返回2次方
postfix operator ^ {}
postfix func ^ (var vector: Int) -> Int {
return vector * vector
}
println(5^) // 25
//中间:计算N的M次方,左结合,优先级为255
infix operator ^^ {associativity left precedence 255}
func ^^(left: Double, right: Double) -> Double {
return pow(left, right)
}
println(2 ^^ 10 - 2 ^^ 3) // 1024 - 8 = 1016