适用于 iOS 的 Swift NativeModule 始终为空
Posted
技术标签:
【中文标题】适用于 iOS 的 Swift NativeModule 始终为空【英文标题】:Swift NativeModule for iOS is always null 【发布时间】:2021-07-14 10:53:22 【问题描述】:我正在使用 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。我的代码有什么问题,我该如何解决?
【问题讨论】:
您是否尝试再次安装该应用程序? 嗨,是的,我也试过了。 在WaterRowerBleManager-Bridging-Header.h文件中添加import语句了吗? 我输入了这个 #import "React/RCTBridgeModule.h" 。我需要添加其他东西吗? @JigneshMayani? 让你导出模块:RCT_EXPORT_MODULE 【参考方案1】:您需要创建Bridge文件并需要导出模块名称才能使用它。
在您的 WaterRowerBleManager.h 文件中
#import <React/RCTBridgeModule.h>
@interface WaterRowerBleManager : NSObject @结束
在您的 WaterRowerBleManager.m 文件中
RCT_EXPORT_MODULE(WaterRowerBleManager);
【讨论】:
当我添加方法声明时,它抱怨缺少上下文。【参考方案2】:在这里遇到了同样的问题。发现主要原因是如果您没有在其中公开任何方法,ReactNative 将不会加载您的 NativeModule。所以解决方案是在.m中封装一些方法并重新构建/重新加载。
【讨论】:
以上是关于适用于 iOS 的 Swift NativeModule 始终为空的主要内容,如果未能解决你的问题,请参考以下文章
适用于 iOS 的 Swift NativeModule 始终为空
XCUIApplication 仅适用于 iOS 9.0 或更新版本,swift3
适用于 iOS 7.1 的带有 swift 的 SKShapeNode
Swift 中适用于 iOS 9 和 iOS 10 的 CoreData 堆栈