快速,objective-c 协议实现 [英] swift, objective-c protocol implementation

查看:56
本文介绍了快速,objective-c 协议实现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

还在努力适应swift,但是由于我的obj-c知识接近0,一直没能实现这个SocketRocket协议.任何帮助将不胜感激

Still trying to get used to swift, but since my obj-c knowledge is close to 0, I have not been able to implement this SocketRocket protocol. Any help would be greatly appreciated

这是我尝试实现的 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

我希望这是实现它的正确方法;这不是......
我得到 'SocketDelegate' 不符合协议 'SRWebSocketDelegate'

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

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

    func didReceiveMessage(message:AnyObject){

    }
}

推荐答案

答案是:

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

Swift 参考书中的函数

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

Method name in Obj-C webSocket:didReceiveMessage is translated such as the first part is the method name, the other parts are the external parameter names (didReceiveMessage). Also note that id becomes AnyObject and Obj-C references are translated with ! as implicitly unwrapped optionals (this is no longer true, implicitly unwrapped optionals are now rare thanks to attributes added to Obj-C declarations).

这篇关于快速,objective-c 协议实现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆