В этих двух методах
func calendar(_ calendar:FSCalendar, appearance:FSCalendarAppearance, fillDefaultColorFor date: Date)->UIColor?{
let dataForm = formatter.string(from:date)
for ph in self.PH{
if ph.date.compare(dataForm) == ComparisonResult.orderedSame{
return UIColor.cyan
}
}
return nil
}
func calendar(_ calendar: FSCalendar, subtitleFor date: Date) -> String? {
let dataForm = formatter.string(from: date)
for ph in self.PH{
if ph.date.compare(dataForm) == ComparisonResult.orderedSame{
return ph.name
}
}
return nil
}
Вы сравниваете строковые представления дат из источника данных PH
и параметра date
, предоставленного методом источника данных / делегата FSCalendar
. Однако вы не установили правильный формат (или вообще любой формат) для использования форматером. Это приводит к тому, что formatter.string(from:)
создает пустые строки, поэтому вы сравниваете пустые строки с фактическими датами, такими как 2020-12-25
. Из краткого обзора документации API API, который вы используете, кажется, что даты указаны в локальном формате даты ISO 8601.
Поэтому вам следует установить такой формат:
func calendar(_ calendar:FSCalendar, appearance:FSCalendarAppearance, fillDefaultColorFor date: Date)->UIColor?{
formatter.dateFormat = "yyyy-MM-dd"
let dataForm = formatter.string(from:date)
for ph in self.PH{
if ph.date == dataFrom {
return UIColor.cyan
}
}
return nil
}
func calendar(_ calendar: FSCalendar, subtitleFor date: Date) -> String? {
formatter.dateFormat = "yyyy-MM-dd"
let dataForm = formatter.string(from: date)
for ph in self.PH{
if ph.date == dataFrom {
return ph.name
}
}
return nil
}
Еще лучше было бы использовать Date
напрямую в источнике данных:
struct PublicHoliday {
var name : String
var date : Date
}
И проанализируйте его, когда получите ответ:
let dateString = jsonObject["response"]["PH"][i]["date"]["iso"].string!
formatter.dateFormat = "yyyy-MM-dd"
let date = formatter.date(from: dateString)!
let ph = PublicHoliday(name: name, date: date)
Таким образом, вы можете сравнить ph.date
напрямую с датой, предоставленной FSCalendar
.