在 Swift 中实现 RCTEventEmitter 但未设置桥接异常
Posted
技术标签:
【中文标题】在 Swift 中实现 RCTEventEmitter 但未设置桥接异常【英文标题】:Implement RCTEventEmitter in Swift but receive exception for bridge is not set 【发布时间】:2019-08-16 18:50:12 【问题描述】:我正在尝试在 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>
和<React/RCTEventEmitter.h>
放在我的桥接头中。
我在这里做错了什么?
【问题讨论】:
【参考方案1】:我发现的问题是你不能自己实例化MyEventEmitter
public static let shared = MyEventEmitter()
您应该重写init
方法并将self
分配给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 已经实例化对象本身并分配桥,而当您自己执行时,桥不会被分配。
【讨论】:
以上是关于在 Swift 中实现 RCTEventEmitter 但未设置桥接异常的主要内容,如果未能解决你的问题,请参考以下文章