You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 3中从JSON数组更新表格时按字母排序引发错误

看起来你已经走对了大半路——排序后的打印结果正确说明逻辑没问题,问题大概率出在数据源更新和表格刷新的衔接上。我帮你梳理几个最可能的坑,一步步排查:

1. 确认排序后的数组真的替换了表格数据源

首先检查你是不是只做了排序,但没把排序后的数组赋值给 tableView 依赖的数据源变量。比如如果你的数据源是 var shows: [ShowModel] = [],那排序后必须写:

// 用Swift更推荐的闭包写法,比compare更直观,还支持本地化排序
let sortedShows = shows.sorted { 
    $0.show_name.localizedStandardCompare($1.show_name) == .orderedAscending 
}
// 关键:替换原数据源,这步不能少!
self.shows = sortedShows

如果只是临时排序但没更新原数组,表格自然还是用旧的未排序数据。

2. 必须在主线程刷新表格

JSON解析和网络请求通常是在后台线程执行的,如果你直接在后台线程调用 tableView.reloadData(),会触发UI线程异常。解决方法是把刷新操作切回主线程:

// 排序完成后,回到主线程更新UI
DispatchQueue.main.async {
    self.tableView.reloadData()
}

这是iOS开发里的高频坑,很多时候打印正确但表格不对,都是线程问题导致的。

3. 处理可选值和空字符串的边界情况

如果你的 show_name 可能为 nil 或者空字符串,排序时要做兼容,避免崩溃:

let sortedShows = shows.sorted {
    let name1 = $0.show_name ?? ""
    let name2 = $1.show_name ?? ""
    return name1.localizedStandardCompare(name2) == .orderedAscending
}

用 localizedStandardCompare 比直接用 < 更好,它会处理本地化的排序规则(比如带重音的字符、大小写)。

4. 完整的extract_json函数示例

结合你给出的代码片段,完整的正确写法大概是这样:

func extract_json(_ data: Data) {
    var json: Any?
    do {
        json = try JSONSerialization.jsonObject(with: data, options: [])
        // 假设你的JSON结构是包含shows数组的字典
        guard let jsonDict = json as? [String: Any], 
              let showsArray = jsonDict["shows"] as? [[String: Any]] else {
            print("JSON结构不匹配")
            return
        }
        // 转成模型数组(这里假设你有ShowModel模型)
        var shows = showsArray.compactMap { ShowModel(json: $0) }
        // 按show_name排序
        shows.sort { 
            ($0.show_name ?? "").localizedStandardCompare($1.show_name ?? "") == .orderedAscending 
        }
        // 主线程更新数据源并刷新表格
        DispatchQueue.main.async {
            self.showsDataSource = shows
            self.tableView.reloadData()
        }
    } catch {
        print("JSON解析失败:\(error.localizedDescription)")
    }
}

如果还是有问题,建议你把具体的错误信息(比如崩溃日志、表格显示的异常情况)贴出来,这样能更精准定位问题~

内容的提问来源于stack exchange,提问作者darkginger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:36:06