重写methodQueue getter时如何扩展RCTEventEmitter?

问题描述

我正在尝试在Swift中创建一个React Native本机模块,该模块需要在主线程上运行,并将事件发送到JS。正常运行(如RN docs中的指示):

@objc(MyModule)
class MyModule: NSObject {
  @objc
  func methodQueue() -> dispatchQueue {
    return dispatchQueue.main
  }
}

发送事件的recommended way是扩展RCTEventEmitter。在上述代码中将NSObject更改为RCTEventEmitter时,出现错误

Method 'methodQueue()' with Objective-C selector 'methodQueue' conflicts with getter for 'methodQueue' from superclass 'RCTEventEmitter' with the same Objective-C selector

如何在扩展methodQueue的同时覆盖RCTEventEmitter的getter?还是有其他方法可以将事件发送给JS?

解决方法

您需要将其作为var getter覆盖:

  @objc
  override var methodQueue: DispatchQueue {
    get {
      return DispatchQueue.main
    }
  }