0

我现在是 Swift 和 IOS 的新手。我正在制作一个使用 Swift 编写的 IOS 本机代码的 React Native 应用程序。这些方法为了链接到 React native 需要一个实现文件。我已经从我的 Swift 类中修补了一些需要继承 NSObject 的方法。但现在我还需要从那里修补事件,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)

我应该如何解决这个问题?我需要创建另一个类并在此处修补该类吗?或者有没有办法在实现文件中对多个子类进行子类化。

4

0 回答 0