我正在尝试在 Swift 中实现 React Native 的事件发射器,以便我可以在我的一些本机模块中重用它。但是,当我从 iOS 本地发送事件时,收到以下错误
Bridge is not set. This is probably because you've explicitly synthesized the bridge in MyEventEmitter, even though it's inherited from RCTEventEmitter.
/// MyEventEmitter.m
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
@interface RCT_EXTERN_MODULE(MyEventEmitter, RCTEventEmitter)
RCT_EXTERN_METHOD(supportedEvents)
@end
Swift 中的实现:
import Foundation
@objc(MyEventEmitter)
class MyEventEmitter: RCTEventEmitter {
public static let shared = MyEventEmitter()
override func supportedEvents() -> [String]! {
return [
... // my event list
]
}
}
在我的本机 swift 代码中,我通过以下方式初始化了发射器
private let eventEmitter: MyEventEmitter = .shared
// send event
self.eventEmitter.sendEvent(withName: "someEvent", body: nil)
我也把<React/RCTBridgeModule.h>
and <React/RCTEventEmitter.h>
在我的桥接头内。
我在这里做错了什么?
我发现的问题是你不能实例化MyEventEmitter
你自己又名在public static let shared = MyEventEmitter()
你应该覆盖init
方法和分配self
to shared
import Foundation
@objc(MyEventEmitter)
class MyEventEmitter: RCTEventEmitter {
public static var shared:MyEventEmitter?
override init() {
super.init()
MyEventEmitter.shared = self
}
override func supportedEvents() -> [String]! {
return [
... // my event list
]
}
}
这是因为 RN 已经实例化了对象本身并分配了桥,而当您自己执行此操作时,桥将不会被分配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)