快速,客观的协议实现

时间:2014-07-31 09:20:01

标签: ios objective-c swift protocols

仍然试图习惯swift,但由于我的obj-c知识接近0,我无法实现这个SocketRocket协议。任何帮助将不胜感激

这是我尝试实施的obj-c代表

@protocol SRWebSocketDelegate <NSObject>

// message will either be an NSString if the server is using text
// or NSData if the server is using binary.
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;

@optional

- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;

@end

我希望这是实施它的正确方法;它不是......
我得到&#39; SocketDelegate&#39;不符合协议&#39; SRWebSocketDelegate&#39;

class SocketDelegate:UIViewController, SRWebSocketDelegate{
    let socket:SRWebSocket! = SRWebSocket()

    override func loadView() {
        self.socket.delegate = self
    }    

    func didReceiveMessage(message:AnyObject){

    }
}

2 个答案:

答案 0 :(得分:15)

答案是:

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

Functions in Swift Reference Book

Obj-C webSocket:didReceiveMessage中的方法名称被翻译,例如第一部分是方法名称,其他部分是外部参数名称(didReceiveMessage)。另请注意,id变为AnyObject,Obj-C引用被!翻译为隐式解包的选项(这不再是真的,由于添加到Obj的属性,隐式解包的选项现在很少见-C声明)。

答案 1 :(得分:3)

另一种解决方案:尝试Starscream - 一个原生的Swift Websocket库。

相关问题