首页 > 解决方案 > 如何从 Socket.io On Function 执行 UI 操作

问题描述

我是使用 socket.io 的新手。我已经为套接字工作制作了一个单例类,并且我在我的应用程序中使用了它的一个实例。

On我的问题是:当我在不同的视图控制器上时,如何在函数中接收到数据后执行任何操作?

import Foundation
import SocketIO
import UIKit

protocol testUI {

    func fareUpdate(amount:NSNumber)


}

var delegate:testUI?

class SocketHelper {

    static let shared = SocketHelper()
    var socket: SocketIOClient!

    let manager = SocketManager(socketURL: URL(string: "http://13.59.81.136:3355/")!, config: [.log(true), .compress, .connectParams(["token":user.shared.token])] )

    private init() {
        socket = manager.defaultSocket
    }

    func connectSocket(completion: @escaping(Bool) -> () ) {
        disconnectSocket()
//        socket.on(clientEvent: .connect) {[weak self] (data, ack) in
//            print("socket connected")
//            self?.socket.removeAllHandlers()
//            completion(true)
//        }
        socket.connect()
    }

    func disconnectSocket() {
        socket.removeAllHandlers()
        socket.disconnect()
        print("socket Disconnected")
    }

    func testStatus(){
        print(socket.status)
    }

    func checkConnection() -> Bool {
        if socket.manager?.status == .connected {
            return true
        }
        return false

    }

    enum Events {

        case search

        func getFareEstimate(params:NSDictionary){
            SocketHelper.shared.socket.emit("fareEstimate" , params)

        }

        func listen(completion: @escaping (Any) -> Void) {


            SocketHelper.shared.socket!.on("rideFares") { (response, emitter) in

                print(response)

                let dic = response as! NSArray

                let data = dic[0] as! NSDictionary

                let fare = data["fare"] as! NSNumber

                DispatchQueue.main.async {

                    delegate?.fareUpdate(amount: fare)

                }


            }



//        func off() {
//            SocketHelper.shared.socket.off(listnerName)
//        }

    }

}
}

我尝试过使用委托,但它似乎不起作用。On当套接字接收函数中的数据时,我可能在多个视图控制器上。

标签: iosswiftsockets

解决方案


推荐阅读