У нас есть существующее приложение React Native, написанное с использованием Objective-C. Мне было поручено преобразовать синтаксис Objective-C в Swift.
Часть работы заключалась в обеспечении того, чтобы мост React Native был инкапсулирован в одном месте и ссылался на внешние методы в классах Swift «Manager».
Раньше у нас был файл под названием «CameraManager», который был доступен для React Native и имел следующий метод:
RCT_REMAP_METHOD(takePicture, imageSaved:(RCTPromiseresolveBlock)resolve failedSavingImage:(RCTPromiseRejectBlock)reject) { ... }
Я хочу преобразовать это во что-то вроде
@interface RCT_EXTERN_MODULE(CameraViewManager, NSObject)
RCT_EXTERN_METHOD(takePicture: imageSaved:(RCTPromiseResolveBlock *)resolve failedSavingImage:(RCTPromiseRejectBlock *)reject)
@end
Это компилируется нормально, но когда в приложении делается вызов takePicture
, возникает следующее исключение.
Exception: 'takePicture::failedSavingImage: is not a recognized Objective-C method'. was thrown while invoking takePicture on target CameraViewManager with params ( ... )
В моем файле CameraViewManager.swift
у меня есть следующее:
@objc
func takePicture(imageSaved resolve: @escaping RCTPromiseResolveBlock, failedSavingImage reject: RCTPromiseRejectBlock) -> Void { ... }
Мое общее знакомство с React Native все еще немного меньше оптимального, поэтому я не уверен, что именно нужно для этого.
Есть идеи?
Таким образом, проблема заключается в том, что, несмотря на раскрытие метода с именем параметра imageSaved
, он не ищет это имя. Он ищет
@objc
func takePicture(_ resolve: @escaping RCTPromiseResolveBlock, failedSavingImage reject: RCTPromiseRejectBlock) -> Void { ... }
Я также изменил свой экспорт в мосте на:
RCT_EXTERN_METHOD(takePicture: (RCTPromiseResolveBlock *)resolve failedSavingImage:(RCTPromiseRejectBlock *)reject)