Подклассы нескольких классов в IOS - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в Swift и IOS прямо сейчас. Я делаю приложение React Native, которое использует собственный код IOS, написанный на Swift. Этим методам для связи с 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);

Теперь мне нужно исправить 2 события в этом файле Swift вместе с этими методами для 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)

Как мне решить это? Нужно ли создавать еще один класс и исправлять этот класс здесь? Или есть способ создать подкласс более одного в файле реализации.

...