在用Objective-c编程中我们常用Block作为回调,在改为swift编写后,如何兼容我们的Block呢?
在苹果的官方文档介绍中,swift中的闭包和Block是兼容的,因此如果你在Swift中要调用的Objc里的方法,且参数是Block类型,则使用满足这个Block返回类型及参数类型的闭包代替。
声明对比
typedef void (^ZHUpdateBlock)(ZHDevice *device, NSError*error);
对应闭包
public typealias ZHUpdateBlock = (ZHRealTekDevice?, Error?) -> Void
函数定义
-(void)scanDevice:(ZHUpdateBlock)update;
func scanDevice(update updateBlock: (_ device: ZHRealTekDevice?, _ error: Error?) -> Void) -> Void {
}
函数中使用
[self scanDevice:^(ZHRealTekDevice *device, NSError*error){
// Do something...
}];
对应闭包
self.realTekManager.scanDevice({(device :ZHRealTekDevice?, error:Error?) -> Void in
// Do something...
})
闭包的表达式:
{ (parameters) -> return type in
statements
}
闭包详情参考苹果文档