首页 > 解决方案 > 寻找将通过 websocket 接收的 JSON 数据显示到 Xcode/Swift 动态表中的最有效方法

问题描述

目前我正在开发一个 MacOS 金融市场交易应用程序,该应用程序每秒可以接收 10-20 个包含 JSON 数据的 websocket 消息。现在,我们假设一旦数据显示在表格中并且收到了新消息,就不再需要以前的数据。将数据放入表中并尽可能快地保持更新的推荐且最有效的方法是什么?

我已经设置了 websocket 连接并且工作正常(使用 SocketRocket。数据按应有的方式进入。但如果没有更好地了解将数据呈现到表中的最有效方法,我真的不想继续下去。我正在阅读有关 DictionaryArrayController 的信息,并且可能正在使用数据库库,但我认为后者只会为我正在尝试做的事情增加不必要的开销。

以下是我收到的数据示例。

    {
    "id":"5267",
    "pt":"T",
    "ls":["1"],
    "lp":["11968"],
    "t":["1571824228"],
    "v":"133758",
    "h":"11981",
    "l":"11928",
    "bp":["0","1","2","3","4","5","6","7","8","9"],
    "bs":["14","73","87","66","74","96","98","85","111","104"],
    "ap":["1","2","3","4","5","6","7","8","9","10"],
    "as":["69","67","62","124","89","105","97","107","113","124"]
    }

我需要显示和更新到表格的唯一值将来自键:“ls”“lp”“v”“h”“l”“bs”“as”

我真的不需要详细的编码响应,但我也永远不会拒绝它。主要只是寻找想法,所以我以后不必切换到不同的方式。

我还将附上一个 Excel 文件的屏幕截图,显示单元格的布局方式。 所需布局的屏幕截图

标签: jsonswiftxcodetableview

解决方案


您是否尝试过使用 Swift 内置的 JSON 解码器?

使用可解码协议创建适当的使用模型。属性名称和数据类型必须与传入的 JSON 完全匹配

struct IncomingData: Decodable {
{
    let ls: [String],
    let lp: [String],
    let h: String,
    let as: [String]
}

像这样设置解析:

func parseJSON(_ incomingData: Data) -> IncomingData? {
    let decoder = JSONDecoder()
    do {
        let parsedData = try decoder.decode(IncomingData.self, from: incomingData)

        print("as: \(as)"
        return parsedData
    }
    catch {
        self.delegate?.didFailWithError(error: error)
        return nil
    }
}

推荐阅读