метод не является признанной целью c метод - PullRequest
2 голосов
/ 25 апреля 2020

Много вопросов задается относительно того же, но ни один из них не решает мою ошибку.

Вот моя цель c file

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <UIKit/UIKit.h>

@interface RCT_EXTERN_MODULE(LanguageTranslationModule, NSObject)


RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText (RCTResponseSenderBlock)callback)

@end

Вот мой быстрый класс

@objc(LanguageTranslationModule)
class LanguageTranslationModule: NSObject {

  var resultCallback: RCTResponseSenderBlock!

  @objc func callbackMethod(_ englishText: String, callback: @escaping RCTResponseSenderBlock) -> Void {
    resultCallback = callback
    debugPrint("Hi there")
    translateText(msg: englishText)
  }...

Вот мой JS вызов из React Native

LanguageTranslationModule.callbackMethod(englishText, (err, r) => {
        if (!err) {
          setProgress(false);
          setMarathiText(r.text.toString());
        } else {
          setProgress(false);
          setMarathiText(err);
        }
      });

Ниже приведен мой метод перевода текста

func translateText(msg: String) {

    let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .mr)
    let englishMarathiTranslator = NaturalLanguage.naturalLanguage().translator(options: options)

    let conditions = ModelDownloadConditions(
      allowsCellularAccess: false,
      allowsBackgroundDownloading: true
    )

    englishMarathiTranslator.downloadModelIfNeeded(with: conditions) {error in
      guard error == nil else { return }
      englishMarathiTranslator.translate(msg) { (translatedText, error) in
        guard error == nil, let translatedText = translatedText else { return }
        let resultsDict = [
          "text" : translatedText
        ];
        self.resultCallback([NSNull() ,resultsDict])
      }
    }
  }

добавил подчеркивание к моему первому параметру в файле swift так как это большая часть решения других вопросов, задаваемых в стеке, а также есть место между подчеркиванием и реальным именем переменной. Если я удаляю переменную englishText из всех файлов и жестко кодирую этот текст в файле swift, то моя функция работает нормально. тогда, конечно, мне пришлось добавить подчеркивание в переменную обратного вызова, поэтому никакой логической ошибки с моей стороны

1 Ответ

1 голос
/ 29 апреля 2020

Я предполагаю, что ошибка в названии вопроса. Кажется, что подпись вашего метода Swift не совпадает с подписью, объявленной в интерфейсе Objective C.

Попробуйте добавить метку аргумента ко второму параметру в объявлении.

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <UIKit/UIKit.h>

@interface RCT_EXTERN_MODULE(LanguageTranslationModule, NSObject)


RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText callback:(RCTResponseSenderBlock)callback)
//                                                      ^^^^^^^^

@end

Объяснение:

RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText callback:(RCTResponseSenderBlock)callback)

соответствует

@objc func callbackMethod(_ englishText: String, callback: @escaping RCTResponseSenderBlock) -> Void

, в то время как ваш исходный вариант

RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText (RCTResponseSenderBlock)callback)

будет соответствовать

@objc func callbackMethod(_ englishText: String, _ callback: @escaping RCTResponseSenderBlock) -> Void
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...