1.@escaping
标明这个闭包是会“逃逸”,通俗点说就是这个闭包在函数执行完成之后才被调用
func doWork(block:()->()) {
print("header")
block()
print("footer")
}
doWork {
print("work")
}
想对上面 异步逃逸
func doWorkAsync(block: @escaping () -> ()) {
DispatchQueue.main.async {
block()
}
}
2.open与public区别
2.1修饰class
public修饰的class只允许外部模块调用,但是不允许继承。 而open修饰的class既允许其他模块调用,也允许被子类继承
2.2修饰class成员。
public修饰的成员只允许其他模块调用,但不能被覆盖(override)。而open修饰的成员既允许被其他模块调用,也允许成员被覆盖
- defer 类似finally
func foo() {
defer {
print("finally")
}
do {
throw NSError()
print("impossible")
} catch {
print("handle error")
}
}
网友评论