问题描述
我正在使用 ReactNative 为 IOS 和 Android 构建一个移动应用程序。我还在使用 Swift 为 iOS 构建一个本机模块。但是当我从 JS 访问模块类时,它总是返回 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);
,
尝试使用以下示例创建自定义本机模块。
https://teabreak.e-spres-oh.com/swift-in-react-native-the-ultimate-guide-part-1-modules-9bb8d054db03
我试过了,效果很好