Проблема с RCT_EXTERN_METHOD при преобразовании приложения React Native с Objective-C в Swift - PullRequest
0 голосов
/ 27 мая 2019

У нас есть существующее приложение 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, выдается следующее исключение.

Исключение: 'takePicture :: failedSavingImage: не является распознанным Objective-С метод ».был брошен во время вызова takePicture на целевой CameraViewManager с параметрами (...)

В моем файле CameraViewManager.swift есть следующее:

@objc
func takePicture(imageSaved resolve: @escaping RCTPromiseResolveBlock, failedSavingImage reject: RCTPromiseRejectBlock) -> Void { ... }

Общее знакомство с React Nativeвсе еще немного меньше оптимального, поэтому я не уверен, что именно нужно для этого.

Есть идеи?

1 Ответ

0 голосов
/ 27 мая 2019

Таким образом, проблема заключается в том, что, несмотря на предоставление метода с именем параметра imageSaved, он не ищет это имя. Это ищет

@objc
func takePicture(_ resolve: @escaping RCTPromiseResolveBlock, failedSavingImage reject: RCTPromiseRejectBlock) -> Void { ... }

Я также изменил свой экспорт в мост на:

RCT_EXTERN_METHOD(takePicture: (RCTPromiseResolveBlock *)resolve failedSavingImage:(RCTPromiseRejectBlock *)reject)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...