Не присваивается значение Date? в переменную
Задача состоит в том, чтобы в объекте класса WeekReport в инициализаторе из нескольских объектов класса jog взять раннюю и позднюю дату(эти даты на одной неделе, фильтруется в другом классе), ппосчитатать день недели этих дат и создать из них дату понедельника и воскресенья той же недели. В инициализаторе я беру секунды с 1970 года, потом в компюьтед проперти считаю fromDate и toDate. И если выводить это в po debugger то значение получается то, что нужно. Но когда беру его в label там везде nil и в итоге получаю рандомные даты.
public var formatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
formatter.timeZone = TimeZone(abbreviation: "UTC")
return formatter
}
@objc class Jog: NSObject, Decodable {
var id: Int?
var distance: Float?
var time: Int?
var dateInt: Int?
var userID: String?
var speed: Int {
if let distance = self.distance, let time = self.time {
return round(distance/Float(time)) <= Float(Int.max) ? Int(round(distance/Float(time))) : Int.max
}
return 0
}
var date: Date? {
get {
let date = Date(timeIntervalSince1970: TimeInterval(dateInt ?? 0))
return Calendar.current.date(from: Calendar.current.dateComponents([.year, .month, .day], from: date))
}
}
var weekday: Int {
return Calendar.current.dateComponents([.weekday], from: self.date ?? Date()).weekday ?? 0
}
}
class WeekReport {
var from: Int?
var to: Int?
var averageSpeed: Int?
var averageTime: Int?
var totalDistance: Float?
var fromDate: Date? {
let date = Date(timeIntervalSince1970: TimeInterval(from ?? 0))
let day = Calendar.current.dateComponents([.weekday], from: date).weekday ?? 0
return Calendar.current.date(byAdding: .day, value: 1 - day, to: date)
}
var toDate: Date? {
let date = Date(timeIntervalSince1970: TimeInterval(to ?? 0))
let day = Calendar.current.dateComponents([.weekday], from: date).weekday ?? 0
return Calendar.current.date(byAdding: .day, value: 7 - day, to: date)
}
init(jogs: [Jog]?) {
guard let jogs = jogs else {return}
let sortedJogs = jogs.sorted {$0.dateInt ?? 0 < $1.dateInt ?? 0}
self.from = sortedJogs.first?.dateInt
self.to = sortedJogs.last?.dateInt
var distance: Float = 0
var totalTime: Int = 0
for jog in sortedJogs {
distance += jog.distance ?? 0
totalTime += jog.time ?? 0
}
self.totalDistance = distance
self.averageTime = sortedJogs.count != 0 ? totalTime / sortedJogs.count : 0
let a = round(totalTime != 0 ? distance / Float(totalTime) : 0)
self.averageSpeed = a <= Float(Int.max) ? Int(a) : Int.max
}
}
Это уже в ячейке:
self.dateLabel.text = "Week \(number): (\(formatter.string(from: report.fromDate ?? Date())) / \(formatter.string(from: report.fromDate ?? Date())))"