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