【问题标题】:Async completion blocks with singleton class swift带有单例类 swift 的异步完成块
【发布时间】:2016-12-17 23:02:02
【问题描述】:

我想在有套接字连接时执行一个函数。但是当有连接时可以立即触发这些方法。没有时必须建立连接。

什么是解决这个问题的好方法?

   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 函数处的回调。

【问题讨论】:

    标签: swift socket.io handler


    【解决方案1】:

    只需在连接上添加一个监听器,如下所示:

    socket.on(clientEvent: .connect) { [unowned self] data, ack in
                print("socket connected")
                print(data)
                if !self.HasConnected {
                    // JOIN YOUR ROOM
                    self.HasConnected = true
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多