gpt4 book ai didi

ios - 未在 swift 类中调用 AsyncSocket 回调

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:10 24 4
gpt4 key购买 nike

GCDAsyncSocket 委托(delegate)在 swift 类中不被调用,但在 UIViewController 类中工作得很好。下面是我的自定义类代码,在这个类中连接函数将启动套接字连接并且它的委托(delegate)永远不会被调用。我在网上和 GCDAsyncSocket github repo 上搜索但没有成功。

class RXSocket: NSObject,GCDAsyncSocketDelegate {

func connect() {

let asyncSocket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue())

do {
try asyncSocket?.connectToHost("www.google.com", onPort: 80)
} catch _ as NSError {
}

}


//MARK:- ASyncSocket Delegate

func socket(sock: GCDAsyncSocket!, didConnectToHost host: String!, port: UInt16) {
print("didConnectToHost")
}

func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) {
print("didReceiveData")
}

func socketDidDisconnect(sock: GCDAsyncSocket!, withError err: NSError!) {
print("socketDidDisconnect")
}

}

在我的 View Controller 类中

    let rxSocket = RXSocket()
rxSocket.connect()

最佳答案

我遇到了同样的问题并且已经解决了。

您的代码示例很好。

回调不起作用的原因很可能是您的实例化对象(例如“rxSocket”)在调用 connect() 之后没有持续存在

这是一个会导致问题的代码示例

func testMyConnection() { 
let rxSocket = RXSocket()
rxSocket.connect()
}

一旦函数返回,常量 rxSocket 就会失效,因为 rxSocket 仅对函数而言是本地的,一旦超出范围就会被销毁。

解决方案是使 rxSocket 成为一个在调用 connect() 之后持续存在的对象,因此当回调函数被 GDCAsyncSocket 调用时它仍然可用。

关于ios - 未在 swift 类中调用 AsyncSocket 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37592367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com