Я реализую представление календаря, и я хотел бы, чтобы он начинался в начале недели, содержащей определенную дату. Например. Если целевая дата - понедельник, 29 февраля 2016 года, и текущий календарь будет установлен в воскресенье, я хотел бы, чтобы мое представление начиналось с воскресенья, 28 февраля.
Кажется, это должно быть просто:
let calendar = NSCalendar.currentCalendar()
let firstDate = calendar.nextDateAfterDate(targetDate,
matchingUnit: .Weekday,
value: calendar.firstWeekday,
options: .SearchBackwards)
Но это не удается:
Завершение приложения из-за неперехваченного исключения "NSInvalidArgumentException", причина: "Необходимо указать только один параметр из набора {NSCalendarMatchPreviousTimePreservingSmallerUnits, NSCalendarMatchNextTimePreservingSmallerUnits, NSCalendarMatchNextTime}. '
Я могу получить в основном то, что хочу:
let firstDate = calendar.nextDateAfterDate(firstDate,
matchingUnit: .Weekday,
value: calendar.firstWeekday,
options: .MatchPreviousTimePreservingSmallerUnits)?
.dateByAddingTimeInterval(-7 * 84600)
Но это похоже на плохую практику, так как иногда количество секунд в день составляет не 86400.
Есть ли способ лучше?