我使用库SwiftSocket将消息发送到我的服务器。当连接建立时,我想创建一个回调来捕获结果。但我的协议总是空的,回调不发送。在类和视图控制器之间使用协议Swift 3
这是我的TcpClient类:
protocol ProtocolTCPClient {
func connexionSucceeded()
}
class UtilsTCPClient {
var delegate: ProtocolTCPClient?
let client: TCPClient?
init(address: String, port: Int32) {
client = TCPClient(address: address, port: port)
switch client!.connect(timeout: 5) {
case .success:
print("Success")
if(delegate != nil){
self.delegate?.connexionSucceeded()//never called
} else{
print("delegate nil")
}
case .failure(let error):
print("Error: ")
print(error)
}
}
}
这是我的ViewController
import UIKit
import SwiftSocket
class ViewController: UIViewController, ProtocolTCPClient {
var client: UtilsTCPClient?
override func viewDidLoad() {
super.viewDidLoad()
self.client = UtilsTCPClient(address: "server", port: 80)
self.client?.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func connexionSucceeded(){
print("Connexion succeeded")//never called
}
}
谢谢你的答案
尝试调试'viewDidLoad'并查看在声明委托时发生的情况 –
可能是您在分配委托之前调用的TCPClient连接闭包。重写init在init本身中发送委托。 –
看起来你的'client!.connect(timeout:5)'是同步的,所以它会阻塞初始化程序中的线程。这意味着直到connect方法执行并返回后才能设置委托。你应该使用异步网络操作 – Paulw11