1
我想在有套接字連接時執行一個函數。但是這些方法可以在有連接時立即觸發。連接必須在沒有連接時進行。具有單例類swift的異步完成塊
什麼是解決此問題的好方法?
import SocketIO
class SocketIOManager: NSObject {
static let sharedInstance = SocketIOManager()
var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "http://192.168.1.59:3000")! as URL)
var connectionMade = false;
override init() {
super.init()
}
func establishConnection(completionHandler: (() -> Void)!) {
if(!connectionMade){
socket.connect()
connectionMade = true;
}
completionHandler();
}
func connectToRoom(roomNumber: String){
establishConnection {
self.socket.emit("connectToRoom", roomNumber);
}
}
}
這是一個很好的設置?是的,當連接關閉時,我必須將bool設置爲false :)
我問這是因爲我的代碼有問題。我把這種在應用程序委託給做了連接:
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
SocketIOManager.sharedInstance.establishConnection {
}
}
這在我的視圖控制器:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
SocketIOManager.sharedInstance.connectToRoom(self.roomNumber);
}
但服務器永遠不會得到connectToRoom「消息」。
SocketIOManager.sharedInstance.connectToRoom(self.roomNumber);
所以它看起來像在viewDidLoad中作出的插座連接的心不是:當我按下了一個按鈕,這個代碼是它的工作原理。但是爲什麼當我按下按鈕時它會工作?因爲我正在等待來自SocketIOManger類連接的connectTo Room函數的回調函數。