Метод экземпляра почти соответствует необязательному требованию

У меня есть класс в swift, который реализует протокол SRWebSocketDelegate, написанный на target-c. Когда я пытаюсь реализовать необязательный метод webSocketDidOpen, я получаю следующее предупреждение: введите здесь описание изображения

Кроме того, когда я запускаю свой код, реализация для webSocketDidOpen не вызывается, и код напрямую переходит к webSocket(_ webSocket: SRWebSocket, didReceiveMessageWith string: String)

Как реализовать необязательные методы моего протокола, написанные на Objective-C, а также избавиться от этих предупреждений?

Заранее спасибо!


person Exception    schedule 19.07.2017    source источник
comment
Что произойдет, если вы выберете исправление «Переименовать»?   -  person rob mayoff    schedule 19.07.2017
comment
@robmayoff, разве это не сделало бы его локальным методом экземпляра вместо реализованного метода SRWebSocketDelegate?   -  person Exception    schedule 19.07.2017
comment
Это уже не реализация протокола; это то, что предупреждение говорит вам. Исправление пытается сделать так, чтобы оно соответствовало требованию.   -  person Rob Napier    schedule 19.07.2017


Ответы (1)


SRWebSocket.h имеет аннотацию NS_ASSUME_NONNULL_BEGIN, поэтому по умолчанию все значения равны nonnull. Это означает, что это:

- (void)webSocketDidOpen:(SRWebSocket *)webSocket;

Импортируется как:

func webSocketDidOpen(_ webSocket: SRWebSocket)

Но вы реализовали:

func webSocketDidOpen(_ webSocket: SRWebSocket!)

SRWebSocket не тот же тип, что и SRWebSocket!. Удалите !. Это, вероятно, то, что исправление переименования сделает для вас.

person Rob Napier    schedule 19.07.2017
comment
Не знал, что это такая маленькая проблема. Спасибо! - person Exception; 19.07.2017
comment
Если Роб решил вашу проблему, нажмите на галочку рядом с его ответом. - person rob mayoff; 20.07.2017