2016-07-12 3 views
1

Я пытаюсь перенести делегат SRWebSocket на наблюдаемый. Это мой RxSocketManagerDelegateProxy.swift:Невозможно использовать функцию proxyForObject в DelegateProxyType (rxSwift)

class RxSocketManagerDelegateProxy: DelegateProxy, DelegateProxyType{ 

static func currentDelegateFor(object: AnyObject) -> AnyObject?{ 
    let socket: SRWebSocket = object as! SRWebSocket 
    return socket.delegate 
} 

static func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) { 
    let socket: SRWebSocket = object as! SRWebSocket 
    socket.delegate = delegate as? SRWebSocketDelegate 
} 

} 

extension SRWebSocket{ 
    public var rx_delegate: DelegateProxy{ 
    return DelegateProxyType.proxyForObject(self) 
} 

// ... 

} 

Проблема заключается в функции proxyForObject. Он не компилируется, как указано выше. Я получаю предупреждение «Статический член proxyForObject» не может использоваться в экземпляре типа «DelegateProxyType.Protocol».

Когда я пытаюсь использовать proxyForObjectFunction как это (хотя это не рекомендуется):

public var rx_delegate: DelegateProxy{ 
    return proxyForObject(RxSocketManagerDelegateProxy.self, self) 
} 

Я получаю сообщение «не удалось утверждение:: Файл/Users/Agentum/Документы/Xcode/Телеметрия/стручки/RxCocoa/RxCocoa/Общие/DelegateProxyType.swift».

Как использовать функцию proxyForObject() для правильной миграции делегата?

ответ

4

Вы должны позвонить proxyForObject по телефону RxSocketManagerDelegateProxy, а не DelegateProxyType.

extension SRWebSocket { 
    public var rx_delegate: DelegateProxy { 
     return RxSocketManagerDelegateProxy.proxyForObject(self) 
     // instead of: `return DelegateProxyType.proxyForObject(self)` 
    } 
} 
+0

Благодарим вас очень! – Marina