SwiftUI 自定义排序

SwuiftUI Custom Sorting

我刚刚开始使用 SwuiftUI,请多多包涵。 我有一个游戏结构,它有一个字段 lastUpdated 和标题。我希望可以选择按上次更新时间或标题对我的列表进行排序。但我不确定这是如何工作的。我已经调查过 sorted(by:) 但我真的什么都做不了。建议?

struct Game: Identifiable, Codable {
let id: UUID
var title: String
var players: [Player]
var lastUsed: Date }

游戏视图

struct GameListView: View {
@Binding var games: [Game]
    
var body: some View {
    
    List {
        ForEach($games) { $game in
            NavigationLink(destination: GameView(game: $game)) {
                Text(game.title)}
            }
        }

ForEachBinding 形式使场景稍微复杂一些,但您应该仍然能够 return 排序集合。它可能看起来像这样:

struct GameListView: View {
    @Binding var games: [Game]
    @State var sortType : SortType = .lastUsed
    
    enum SortType {
        case lastUsed, title
    }
    
    var sortedGames : [Binding<Game>] {
        $games.sorted(by: { a, b in
            switch sortType {
            case .lastUsed:
                return a.wrappedValue.lastUsed < b.wrappedValue.lastUsed
            case .title:
                return a.wrappedValue.title < b.wrappedValue.title
            }
        })
    }
    
    var body: some View {
        List {
            ForEach(sortedGames) { $game in
                NavigationLink(destination: GameView(game: $game)) {
                    Text(game.title)}
            }
        }
    }
}