将Objective-C的@synchronized指令暴露给Swift。与Objective-C指令类似,Synchronized会锁定互斥量,运行一些代码,并在代码完成或抛出异常时释放锁。
一旦链接框架,下面的Swift代码应该能编译
import Synchronized
let x = synchronized(NSObject()) { 0 }
public func synchronized(object: AnyObject, closure: () -> Void)
使用
synchronized(mutexObject) {
// Code to run in your critical section
}
public func synchronized<T>(object: AnyObject, closure: () -> T) -> T
使用
let value = synchronized(threadUnsafeDictionary) {
threadUnsafeDictionary[key]
}
@synchronized
的差异Objective-C的@synchronized
是一个语言级指令,不引入新的函数作用域。这意味着return
语句会导致程序从包含@synchronized
指令的周围函数返回。
- (void)returnDifferenceExample
{
@synchronized {
return;
}
NSLog(@"This line of code does not run.");
}
相比之下,Synchronized使用闭包,这确实引入了函数作用域。从传递给synchronized
的闭包返回只会退出闭包,而不会退出周围函数。
func returnDifferenceExample() {
synchronized {
return
}
println("This line of code does run.")
}
Synchronized的闭包用@noclosure
属性标注,这消除了使用self.
访问实例变量的需要,因此在这一点上与Objective-C的@synchronized
指令类似。