如何在 RxSwift 中为 HasDelegate 协议编写 getter 和 setter?

How to write getter and setter for HasDelegate protocol in RxSwift?

我正在为 IWDeviceManager 实施 HasDelegate 协议。

在我看过的所有帖子中,没有人为这个public var delegate 属性写过getter & setter。

编译器明确要求我为 public var delegate 编写 getter & setter。为什么我的情况需要它?

我尝试编写,但当我尝试获取或设置委托时我的代码崩溃了。

如何解决这个问题?

我已经分享了下面的代码

extension IWDeviceManager: HasDelegate {

    public typealias Delegate = IWDeviceManagerDelegate

    // Compiler explicitly asks to write getter and setter for this.
    public var delegate: IWDeviceManagerDelegate? { 
        get { // Crashes here
            return IWDeviceManager.shared()?.delegate 
        } 
        set(newValue) { // crashes here
            IWDeviceManager.shared()?.delegate = newValue 
        } 
    }
}

下面是 IWDeviceManager 的接口

open class IWDeviceManager : NSObject {

    weak open var delegate: IWDeviceManagerDelegate!

    open class func shared() -> Self!

    open func initMgr()

    open func initMgr(with config: IWDeviceManagerConfig!)

}

而不是使用 HasDelegate 试试这个:

class IWDeviceManagerDelegateProxy
    : DelegateProxy<IWDeviceManager, IWDeviceManagerDelegate>
    , DelegateProxyType
    , IWDeviceManagerDelegate {

    init(parentObject: IWDeviceManager) {
        super.init(parentObject: parentObject, delegateProxy: IWDeviceManagerDelegateProxy.self)
    }

    static func currentDelegate(for object: IWDeviceManager) -> Delegate? {
        return object.delegate
    }

    static func setCurrentDelegate(_ delegate: IWDeviceManagerDelegate?, to object: IWDeviceManager) {
        object.delegate = delegate
    }

    static func registerKnownImplementations() {
        self.register { IWDeviceManagerDelegateProxy(parentObject: [=10=]) }
    }
}