Socket.io Javascript 发射到 Swift

Socket.io Javascript emit to Swift

我有这个 Javascript socket.io emit 函数,我需要使用文档中的说明在 Swift、SwiftUI 中编写它:

订阅和获取归档进程事件:

  1. 订阅'galleryArchive'套接字事件
  2. 通过套接字发出: socket.emit("subscribeOnGalleryArchiveInfo", { archiveEventName, galleryId }, data => {});

脚本:

socketClient.emit(
    'subscribeOnGalleryArchiveInfo',
    { archiveEventName: eventName, galleryId },
    (event: GalleryArchiveEvent) => {
        const { data } = event;
        setArchivingData(data);
    }
);

我所做的只是在 Swift 中初始化 Socket viewModel,但似乎无法在没有一堆错误的情况下重新创建此 emit 函数。

我的代码:

class GalleryArchiveSocket: ObservableObject {
    @Published var archiveEventName: String
    @Published var galleryId: String

    var manager: SocketManager?
    var socket: SocketIOClient?

    init(archiveEventName: String, galleryId: String) {
        self.archiveEventName = archiveEventName
        self.galleryId = galleryId
        guard let apiUrl = AppConfig.rootURL
        else {
            return
        }
        manager = SocketManager(
            socketURL: apiUrl,
            config: [
                .extraHeaders(
                    [
                        HTTPHeader.authorization.key: HTTPHeader.authorization.value.headerValue
                    ]
                ),
                .log(true),
                .compress
            ]
        )
        guard let socket = manager?.defaultSocket
        else {
            return
        }
        socket.on(clientEvent: .connect) {_, _ in
            print("I'm connected")
            // Emit function with param ? and receive data ?
        }
        socket.connect()
    }
}

我通过查看大量 Socket.io swift 示例找到了解决方案,直到我看到有人传递了如下数据:["archiveEventName": self.archiveEventName, "galleryId": self.galleryId]

@workingdog帮助初始语法。

socket.on(clientEvent: .connect) {_, _ in
            socket.emit("subscribeOnGalleryArchiveInfo", ["archiveEventName": self.archiveEventName, "galleryId": self.galleryId])
            socket.on("GalleryArchiveEvent") { data, ack in
                print(data)
            }
        }