Ответ 1
Я боролся с этой проблемой весь день. Решено, установив Swift Compiler для использования версий Legacy (XCode 8 предпочитает Swift 3), поэтому в:
Настройки сборки > Прокрутите вниз до " Использовать устаревшую версию языка Swift" как Да.
Я пытаюсь связать свой код React-Native 0.33 с супер простым методом Swift, следуя этому руководству, но все, что я получаю, это show:(NSString *)name is not a recognized Objective-C method
.
Здесь мой код:
import Foundation
@objc(SwitchManager)
class SwitchManager: NSObject {
@objc func show(name: String) -> Void {
NSLog("%@", name);
}
}
#import "RCTBridgeModule.h"
@interface RCT_EXTERN_MODULE(SwitchManager, NSObject)
RCT_EXTERN_METHOD(show:(NSString *)name)
@end
#import "RCTBridgeModule.h"
Затем в моем файле index.ios.js
я импортирую SwitchManager с помощью import { SwitchManager } from 'NativeModules';
и вызывая SwitchManager.show('One');
. Здесь произошла ошибка.
Не уверен, что случилось.
Я боролся с этой проблемой весь день. Решено, установив Swift Compiler для использования версий Legacy (XCode 8 предпочитает Swift 3), поэтому в:
Настройки сборки > Прокрутите вниз до " Использовать устаревшую версию языка Swift" как Да.
Это часть изменений Swift 3 и может быть решена путем добавления подчеркивания:
import Foundation
@objc(SwitchManager)
class SwitchManager: NSObject {
@objc func show(_ name: String) {
NSLog("%@", name);
}
}
См. Swift 3 0046 Предложение: Установите согласованное поведение меток по всем параметрам, включая первые метки, которые вызывают в Руководство по миграции Swift.org в разделе "Согласованные метки первого аргумента".
В принципе, как Objective-C видит, что Swift-методы изменились с помощью Swift 3.
РЕДАКТИРОВАТЬ: Это все еще имеет место в Swift 4, см. документы здесь в разделе "Опускание ярлыков аргументов" .
это работало для меня в xcode 8.0 и swift 3
@objc func openPresentedViewController(_ name: String,name1: String,name2: String){
}
добавить _
к не помеченным элементам
RCT_EXTERN_METHOD(methodName:(NSString *)name name1:(NSString *)name1 name2:(NSString *)name2)
как вы можете видеть в объекте с именем метода, является немаркированный параметр add _
к нему по быстрому методу