অবজেক্টিভ-সিতে, আপনি একটি ব্লকের ইনপুট এবং আউটপুট সংজ্ঞায়িত করতে পারেন, কোনও পদ্ধতিতে পাস করা blocks ব্লকগুলির একটি সংরক্ষণ করতে পারেন, তারপরে সেই ব্লকটি পরে ব্যবহার করুন:
// 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()
}
সংকলক সম্পূর্ণতা হ্যান্ডলারের ঘোষণাটি পছন্দ করে না। আমি এর জন্য দোষ দিচ্ছি না, তবে, সুইফটে পরে সেট এবং ব্যবহার করা যেতে পারে এমন কোনও ক্লোজ কীভাবে সংজ্ঞায়িত করব?