Скажем, у меня есть класс под названием ExampleClass
.
Скажи, что я тогда пишу код так:
@objc class ExampleClass: NSObject {}
С заголовком файла ObjectiveC, например, так:
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RCT_EXTERN_MODULE(ExampleClass, NSObject)
@end
Что я тогда использую в своем приложении React Native, например:
console.log('exampleClass', React.NativeModules.ExampleClass);
Теперь компиляция с react-native run-ios
приводит к следующим исключениям:
❌ Undefined symbols for architecture x86_64
> Symbol: `_OBJC_CLASS_$_ExampleClass`
> Referenced from: `l_OBJC_$_CATEGORY_ExampleClass_$_RCTExternModule in ExampleClass-2517576D7E90370.o
❌ ld: symbol(s) not found for architecture x86_64
❌ clang: error: linker command failed with exit code 1 (use -v to see invocation)
** BUILD FAILED **
При изменении только swift, чтобы он читал:
@objc(ExampleClass)
class ExampleClass: NSObject {}
приводит к успешной компиляции. В чем разница между этими двумя синтаксисами? Почему последний работает, а первый нет?