我使用庫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