Как написать геттер и сеттер для протокола HasDelegate в RxSwift? - PullRequest
1 голос
/ 25 сентября 2019

Я реализую протокол HasDelegate для IWDeviceManager.

Во всех прочитанных мною постах никто не написал getter & setter для этого свойства public var delegate.

Компилятор явно просит меня написать getter & setter для public var delegate.Почему это требуется в моем случае?

Я пытался писать, но мой код зависает при попытке получить или установить делегата.

Как мне решить эту проблему?

Iподелились кодом ниже

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!)

}

1 Ответ

1 голос
/ 26 сентября 2019

Вместо использования 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: $0) }
    }
}
...