hph*_*p95 3 objective-c swift react-native
我正在尝试在 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.
Run Code Online (Sandbox Code Playgroud)
Bridge is not set. This is probably because you've explicitly synthesized the bridge in MyEventEmitter, even though it's inherited from RCTEventEmitter.
Run Code Online (Sandbox Code Playgroud)
在 Swift 中的实现:
/// 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
Run Code Online (Sandbox Code Playgroud)
在我的原生 swift 代码中,我通过以下方式初始化了发射器
import Foundation
@objc(MyEventEmitter)
class MyEventEmitter: RCTEventEmitter {
public static let shared = MyEventEmitter()
override func supportedEvents() -> [String]! {
return [
... // my event list
]
}
}
Run Code Online (Sandbox Code Playgroud)
我也把<React/RCTBridgeModule.h>和<React/RCTEventEmitter.h>放在我的桥接头里面。
我在这里做错了什么?
我发现的问题是你不能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
]
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为 RN 将实例化对象本身并分配桥,而当你自己做时,桥不会被分配。
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |