
// in .h typedef voID (^APLCalibrationProgressHandler)(float percentComplete); typedef voID (^APLCalibrationCompletionHandler)(NSInteger measuredPower,NSError *error); // in .m @property (strong) APLCalibrationProgressHandler progressHandler; @property (strong) APLCalibrationCompletionHandler completionHandler; - (ID)initWithRegion:(CLBeaconRegion *)region completionHandler:(APLCalibrationCompletionHandler)handler { self = [super init]; if(self) { ... _completionHandler = [handler copy]; .. } return self;}- (voID)performCalibrationWithProgressHandler:(APLCalibrationProgressHandler)handler{ ... self.progressHandler = [handler copy]; ... dispatch_async(dispatch_get_main_queue(),^{ _completionHandler(0,error); }); ...} 所以我想在Swift做等同的事情:
var completionHandler:(float)->VoID={}init(){ locationManager = CLLocationManager() region = CLBeaconRegion() timer = NSTimer()}convenIEnce init(region: CLBeaconRegion,handler:((float)->VoID)){ self.init() locationManager.delegate = self self.region = region completionHandler = handler rangedBeacons = NSMutableArray()} 编译器不喜欢completionHandler的声明。不是我责怪它,但是,如何定义一个可以设置和使用以后在Swift中的闭包?
编译器抱怨var completionHandler: (float)->VoID = {} 因为右手侧不是适当签名的关闭,即闭合
一个float参数。以下将为“无关”关闭赋值
完成处理程序:
var completionHandler: (float)->VoID = { (arg: float) -> VoID in} 这可以缩短到
var completionHandler: (float)->VoID = { arg in } 由于自动类型推理。
但你可能想要的是完成处理程序被初始化为nil
这与将Objective-C实例变量初始化为nil的方式相同。在Swift
这可以用一个可选的实现:
var completionHandler: ((float)->VoID)?
现在该属性自动初始化为nil(“无值”)。
在Swift中,您将使用可选的绑定来检查
完成处理程序有一个值
if let handler = completionHandler { handler(result)} 或可选链接:
completionHandler?(result)总结
以上是内存溢出为你收集整理的在Swift中将闭包存储为变量全部内容,希望文章能够帮你解决在Swift中将闭包存储为变量所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)