Средство проверки типа Swift отклоняет протокол, который имеет требование к классу в качестве типа класса - PullRequest
0 голосов
/ 27 октября 2018

Об ошибке, обнаруженной в https://github.com/RxSwiftCommunity/RxStarscream/pull/23.

Я пытаюсь обобщить тип, чтобы можно было смоделировать класс, на котором он основан. Это означает, что я хочу перейти от конкретной реализации к протоколу.

Исходный класс выглядит так:

open class WebSocket : NSObject, StreamDelegate, WebSocketClient, WSStreamDelegate { ... }
    ...
}

Я хочу заменить это на этот протокол, который WebSocket уже расширяется:

public protocol WebSocketClient : AnyObject {
    ...
}

Это означает, что я заменяю

public class RxWebSocketDelegateProxy: DelegateProxy<WebSocket, NSObjectProtocol>, ... {
    ...
}

с

public class RxWebSocketDelegateProxy: DelegateProxy<WebSocketClient, NSObjectProtocol>, ... {
    ...
}

Все это кажется достаточно простым - WebSocketClient предоставляет все необходимые функции. Удивительно, но я получаю сообщение об ошибке

'DelegateProxy' требует, чтобы 'WebSocketClient' был типом класса

Я не уверен, что мне здесь не хватает, и буду признателен за указатели!

1 Ответ

0 голосов
/ 27 октября 2018

Попробуйте с @ objc как показано ниже:

@objc public protocol WebSocketClient : AnyObject {
    ---
}
...