ऑब्जेक्टिव-सी में, आप एक ब्लॉक के इनपुट और आउटपुट को परिभाषित कर सकते हैं, उन ब्लॉकों में से एक को स्टोर कर सकते हैं जो एक विधि में पारित हो गए हैं, फिर बाद में इस ब्लॉक का उपयोग करें:
// 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);
});
...
}
तो मैं स्विफ्ट में संतुलन बनाने की कोशिश कर रहा हूं:
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()
}
कंपाइलर को पूर्णहैंडलर की घोषणा की पसंद नहीं है। ऐसा नहीं है कि मैं इसे दोष देता हूं, लेकिन, मैं एक बंद को कैसे परिभाषित करता हूं जिसे स्विफ्ट में बाद में सेट और उपयोग किया जा सकता है?