我现在是Swift和IOS的新手。我正在制作一个使用Swift编写的iOS本机代码的React Native应用。为了链接到React native,这些方法需要一个实现文件。我已经从Swift类中修补了一些方法,需要将NSObject子类化。但是现在我还需要从那里修补事件,而Swift不允许我继承多个类。
这是Swift文件
@objc func initializeCoreLocation(_ callback: @escaping RCTResponseSenderBlock) {
locationManager.delegate = self
locationManager.allowsBackgroundLocationUpdates = true
callback(["initialize Location"])
}
@objc func initializeNotifications(_ callback: @escaping RCTResponseSenderBlock) {
let center = UNUserNotificationCenter.current()
let options: UNAuthorizationOptions = [.alert, .sound]
center.requestAuthorization(options: options) {
(granted, error) in
if !granted {
NSLog("Permission not granted for notifications");
callback(["Notification permission not granted"])
} else if (granted) {
callback(["Notificaiton permission granted"])
}
}
}
为了使这些方法可用于React Native,我必须添加一个实现文件
@interface RCT_EXTERN_MODULE(BeaconManager, NSObject)
RCT_EXTERN_METHOD(initializeCoreLocation:
(RCTResponseSenderBlock)callback);
RCT_EXTERN_METHOD(checkAuthorization:
(RCTResponseSenderBlock)callback);
RCT_EXTERN_METHOD(initializeNotifications: (RCTResponseSenderBlock)callback);
RCT_EXTERN_METHOD(initializeMonitoring: (RCTResponseSenderBlock)callback);
现在我需要将此Swift文件中的2个事件以及这些方法修补到React Native
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
// logMessage("didEnterRegion \(region.identifier)")
NSLog("Found a beacon %d", region.identifier)
}
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
//logMessage("didExitRegion \(region.identifier)")
NSLog("Lost a beacon %d", region.identifier)
}
@end
为此,我也需要在实现文件中将RCTEventEmitter子类化,但是Swift不允许这样。
@interface RCT_EXTERN_MODULE(BeaconManager, NSObject, RCTEventEmitter)
我该如何解决? 我是否需要创建另一个类并在此处修补该类?还是有一种方法可以在实现文件中对多个子类进行子类化。