gpt4 book ai didi

json - Swift:如何使用来自 SocketIO emitWithAck 方法的响应

转载 作者:搜寻专家 更新时间:2023-11-01 07:01:41 33 4
gpt4 key购买 nike

我正在使用 SocketIO 库将我的 iOS 应用程序连接到我的服务器。我想向服务器发送一些数据并在确认中返回一个 json 字典。我目前有这样的东西:

SocketHandler.mySocket.emitWithAck("my_event", [session, someInput]).timingOut(after: 3) {data in

let myData = try? JSONDecoder().decode(myStruct.self, from: data)

MyStruct 定义为继承自 Decodable 的 Class,类似于我期望的 json 结构。

我收到以下错误:无法将类型“Any”的值转换为预期的参数类型“Data”

知道如何处理该类型转换吗?或者我需要走完全不同的路线吗?

(适用于 iOS 11.3 的 Swift 4.1)

干杯!

最佳答案

如果有人想知道如何将 SocketIO 与 Decodable 一起使用,我根据 Dan Karbayev 的回答为客户端创建了一个小扩展以在回调中接受 Decodable。

import Foundation
import SocketIO

extension Decodable {
init(from any: Any) throws {
let data = try JSONSerialization.data(withJSONObject: any)
self = try JSONDecoder().decode(Self.self, from: data)
}
}

extension SocketIOClient {

func on<T: Decodable>(_ event: String, callback: @escaping (T)-> Void) {
self.on(event) { (data, _) in
guard !data.isEmpty else {
print("[SocketIO] \(event) data empty")
return
}

guard let decoded = try? T(from: data[0]) else {
print("[SocketIO] \(event) data \(data) cannot be decoded to \(T.self)")
return
}

callback(decoded)
}
}
}

用法:

socket.on("location") { (data: LocationEventData) in
// ...
}

socket.on("success") { (name: String) in
// ...
}

其中 LocationEventDataStringDecodable

关于json - Swift:如何使用来自 SocketIO emitWithAck 方法的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824418/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com