static
1. static可以修饰class, struct,protocol, 函数
2. static,修饰的方法是不可重写的 因此不允许同时使用open修饰
3. static,修饰的方法采用直接派发
final
1. 不允许修饰结构体,procotol,函数
2. 采用直接派发
3. 被修饰的类或者方法,是不能被继承和重写的
dynamic
1. 动态的,同样不允许修饰class, struct,protocol
2. 采用dynamic修饰的函数和方法,会采用运行时消息机制派发
where
where一般用作条件限定。它可以用在for-in、swith、do-catch中
例如:
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for item in numbers where item % 2 == 1 {
print("输出: \(item)") // 将输出1,3,5,7,9等数
}
numbers.forEach { (item) in
switch item {
case let x where x > 7:
print("输出: \(x)") // 将输出8和9
default:
break
}
}
//只有UILabel才能实现此协议
extension SomeProtocol where Self: UILabel {
func showParamA() {
print(self.a)
}
deinit
在Swift中,deinit属于析构函数,当对象结束其生命周期时(例如对象所在的函数已调用完毕),
系统自动执行析构函数。和OC中的dealloc一样的
例如:1.对象销毁
2.KVO移除
3.移除通知
4.NSTimer销毁
defer
1. defer语句在代码块(方法、闭包等,可以理解为大括号包装起来的代码)作用域退出之前执行
2. 也就是代码块中其他应该执行的代码都执行完了才执行defer中的代码
3. 一个代码块允许多个defer,多个defer执行的顺序 从后到前
inout
目的是将值类型的对象用引用的方式传递。
例如:Int,CGFloat,Bool,Character,Array,struct等,这些值类型的对象都可以使用inout修饰,达到使用引用的方式传递的目的