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)}
}
}
ForEach
的 Binding
形式使场景稍微复杂一些,但您应该仍然能够 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)}
}
}
}
}
我刚刚开始使用 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)}
}
}
ForEach
的 Binding
形式使场景稍微复杂一些,但您应该仍然能够 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)}
}
}
}
}