假设我有一个名为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 {}
结果编译成功。这两种语法有什么区别?为什么后者有效而前者无效?