Невозможно скомпилировать код Swift 2, вызывающий в библиотеке Objective C (модуль)

Я пытаюсь использовать SocketRocket (модуль Objective-C) из Swift 2. У меня есть заголовок моста.

Вот что я пытаюсь:

import SocketRocket
class WS3: NSObject, SRWebSocketDelegate {
    func websocket(webSocket: SRWebSocket!, 
                   didReceiveMessage message: AnyObject!) -> Void {
    }
}

И сообщение об ошибке компилятора:

Error:Error:Build failed with 1 error and 0 warnings in 1s 685ms
/Users/jao/Desktop/consulting/blackring/Black Ring/Black Ring/WS3.swift
    Error:Error:line (8)type 'WS3' does not conform to protocol 'SRWebSocketDelegate'
    x86_64
    Note:Note:class WS3: NSObject, SRWebSocketDelegate {
    Note:Note:      ^
    Note:Note:    public func webSocket(webSocket: SRWebSocket!, didReceiveMessage message: AnyObject!)
    Note:Note:                ^
SocketRocket.SRWebSocketDelegate
    Note:Note:protocol requires function 'webSocket(_:didReceiveMessage:)' with type '(SRWebSocket!, didReceiveMessage: AnyObject!) -> Void'

Мне кажется, что я делаю именно то, что говорится в сообщении об ошибке. Что я делаю неправильно?

1 ответ

Я понял.

didReceiveMessage метод объявлен обязательным в протоколе. Проблема с вашим методом подписи. Ваш didReceiveMessage сигнатура метода не совпадает с сигнатурой метода протокола.

Замени это:

func websocket(webSocket: SRWebSocket!,
        didReceiveMessage message: AnyObject!) -> Void {
    }

С:

func webSocket(webSocket: SRWebSocket!,
    didReceiveMessage message: AnyObject!) {

}

Это именно то, на что Xcode жалуется, что требуемый метод протокола отсутствует.

Я проверил его в конце, и он работает нормально.

Совет: пожалуйста, попробуйте использовать IntelliSense XCode, чтобы избежать подобных ошибок.

Другие вопросы по тегам