Swift iOS 的 NativeModule 始终为 null
Swift NativeModule for iOS is always null
我正在为 IOS 和 Android 使用 ReactNative 构建移动应用程序。我还使用 Swift 为 iOS 构建了一个原生模块。但是当我从 JS 访问模块 class 时,它总是返回 null.
我使用以下代码创建了一个 WaterRowerBleManager.swift 文件。
import Foundation
@objc(WaterRowerBleManager)
class WaterRowerBleManager: NSObject {
@objc
func constantsToExpose() -> [AnyHashable : Any]! {
return [
"number": 123.9,
"string": "foo",
"boolean": true,
"array": [1, 22.2, "33"],
"object": ["a": 1, "b": 2]
]
}
@objc
static func requiresMainQueueSetup() -> Bool {
return true
}
}
它还创建了一个扩展名为“.h”的桥头文件。我保留了文件原样。
然后我用下面的代码创建了一个 WaterRowerBleManager.m 文件。
#import <Foundation/Foundation.h>
#import "React/RCTBridgeModule.h"
@interface RCT_EXTERN_MODULE(WaterRowerBleManager, NSObject)
@end
从 ReactNative 中,从 App.js 访问模块,如下所示。
import { NativeModules } from 'react-native';
NativeModules.WaterRowerBleManager
NativeModules.WaterRowerBleManager 总是返回 null。我的代码有什么问题,我该如何解决?
您需要创建 Bridge 文件并需要导出模块名称才能使用它。
在您的 WaterRowerBleManager.h 文件中
#import <React/RCTBridgeModule.h>
@interface WaterRowerBleManager:NSObject
@结束
在您的 WaterRowerBleManager.m 文件中
RCT_EXPORT_MODULE(WaterRowerBleManager);
这里遇到了同样的问题。发现主要原因是如果您没有在其中公开任何方法,ReactNative 将不会加载您的 NativeModule。所以解决方案是将一些方法封装在 .m 和 rebuild/reload.
中
我正在为 IOS 和 Android 使用 ReactNative 构建移动应用程序。我还使用 Swift 为 iOS 构建了一个原生模块。但是当我从 JS 访问模块 class 时,它总是返回 null.
我使用以下代码创建了一个 WaterRowerBleManager.swift 文件。
import Foundation
@objc(WaterRowerBleManager)
class WaterRowerBleManager: NSObject {
@objc
func constantsToExpose() -> [AnyHashable : Any]! {
return [
"number": 123.9,
"string": "foo",
"boolean": true,
"array": [1, 22.2, "33"],
"object": ["a": 1, "b": 2]
]
}
@objc
static func requiresMainQueueSetup() -> Bool {
return true
}
}
它还创建了一个扩展名为“.h”的桥头文件。我保留了文件原样。
然后我用下面的代码创建了一个 WaterRowerBleManager.m 文件。
#import <Foundation/Foundation.h>
#import "React/RCTBridgeModule.h"
@interface RCT_EXTERN_MODULE(WaterRowerBleManager, NSObject)
@end
从 ReactNative 中,从 App.js 访问模块,如下所示。
import { NativeModules } from 'react-native';
NativeModules.WaterRowerBleManager
NativeModules.WaterRowerBleManager 总是返回 null。我的代码有什么问题,我该如何解决?
您需要创建 Bridge 文件并需要导出模块名称才能使用它。
在您的 WaterRowerBleManager.h 文件中
#import <React/RCTBridgeModule.h>
@interface WaterRowerBleManager:NSObject @结束
在您的 WaterRowerBleManager.m 文件中
RCT_EXPORT_MODULE(WaterRowerBleManager);
这里遇到了同样的问题。发现主要原因是如果您没有在其中公开任何方法,ReactNative 将不会加载您的 NativeModule。所以解决方案是将一些方法封装在 .m 和 rebuild/reload.
中