Как я понял, вы хотели бы отсортировать массив объектов Datas в своем словаре. Но не сортируйте dictionary
сам. Если вы хотите отсортировать каждое value
(что составляет [Datas]
) в вашем словаре key-value
, то в вашем viewDidLoad()
, вероятно, вы можете отсортировать массив в ваших данных так, как вам нужно (либо ascending
, либо descending
).
Вы можете добиться этого, зацикливая свой словарь и сортируя значения таким образом:
for (id, datas) in todaysTimes {
todaysTimes[id] = datas.sorted(by: { $0.start.compare($1.start) == .orderedDescending })
}
Для полного примера , вы можете попробовать это в http://online.swiftplayground.run/:
struct Datas {
var id: Int
var isVisited: Bool
var start: Date
var end: Date
}
// Dump data to show an example
var todaysTimes = [Int:[Datas]]()
let today = Date()
let one_day_before_today = Calendar.current.date(byAdding: .day, value: -1, to: today)!
let two_day_before_today = Calendar.current.date(byAdding: .day, value: -2, to: today)!
todaysTimes[1] = [Datas(id: 1, isVisited: false, start: one_day_before_today, end: Date()), Datas(id: 1, isVisited: false, start: today, end: Date()), Datas(id: 1, isVisited: false, start: two_day_before_today, end: Date())]
// Sort Descending
print("Sorted descending")
for (id, datas) in todaysTimes {
todaysTimes[id] = datas.sorted(by: { $0.start.compare($1.start) == .orderedDescending })
}
print(todaysTimes)
// Sort Ascending
print("Sorted ascending")
for (id, datas) in todaysTimes {
todaysTimes[id] = datas.sorted(by: { $0.start.compare($1.start) == .orderedAscending })
}
print(todaysTimes)
// Will print these two lines
// Sorted descending
// [1: [SwiftPlayground.Datas(id: 1, isVisited: false, start: 2019-06-21 12:13:34 +0000, end: 2019-06-21 12:13:34 +0000), SwiftPlayground.Datas(id: 1, isVisited: false, start: 2019-06-20 12:13:34 +0000, end: 2019-06-21 12:13:34 +0000), SwiftPlayground.Datas(id: 1, isVisited: false, start: 2019-06-19 12:13:34 +0000, end: 2019-06-21 12:13:34 +0000)]]
// Sorted ascending
// [1: [SwiftPlayground.Datas(id: 1, isVisited: false, start: 2019-06-19 12:13:34 +0000, end: 2019-06-21 12:13:34 +0000), SwiftPlayground.Datas(id: 1, isVisited: false, start: 2019-06-20 12:13:34 +0000, end: 2019-06-21 12:13:34 +0000), SwiftPlayground.Datas(id: 1, isVisited: false, start: 2019-06-21 12:13:34 +0000, end: 2019-06-21 12:13:34 +0000)]]
// Try the example in online.swiftplayground.run