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

SwiftUI自定义数组按最新/最早点击时间排序收藏列表问题求解

解决方案

你需要修改三处核心逻辑即可实现按最后点击时间排序的需求:

  • 调整DataArray的属性定义,把需要动态修改的isFavorite从常量let改为变量var,确保收藏状态可切换
struct DataArray: Identifiable {
    let id: Int
    let cities: String
    let name1: String
    let name2: String
    
    var isFavorite: Bool // 此处从let改为var
    var date = Date()
}
  • 修改收藏按钮的点击逻辑,切换收藏状态的同时更新对应条目的最后操作时间为当前时间
// ButtonView 中的收藏按钮点击事件
Button(action: {
    self.items.datas[self.index].isFavorite.toggle()
    self.items.datas[self.index].date = Date() // 新增此行更新操作时间
} label: {
    Image(systemName: self.items.datas[self.index].isFavorite ? "suit.heart.fill" : "suit.heart").padding()
})
  • 修正FavoriteView里的排序逻辑,区分最新/最旧的排序规则
private func sorting() -> [DataArray] {
    switch selection {
        case 0:
            // 最新优先:时间更晚的排在前面
            return items.datas.sorted(by: { $0.date > $1.date })
        case 1:
            // 最旧优先:时间更早的排在前面
            return items.datas.sorted(by: { $0.date < $1.date })
        case 2:
            return items.datas.sorted(by: { $0.cities < $1.cities })
        case 3:
            return items.datas.sorted(by: { $0.cities > $1.cities })
        default:
            return items.datas
    }
}

额外补充:你提供的原始代码中ListDataArray的实例化部分存在语法问题,包括参数后漏写逗号、布尔值False要改为Swift规范的小写false、存在多余的右括号,调整后即可正常编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:03