Как изменить себя в NSDate расширении Swift?
Я пытаюсь написать расширение, где NSDate может быть изменено на другую дату. Я хочу сделать расширение, которое изменит себя.
Я проверял различные методы, но не могу найти, как изменить себя. Я пытаюсь что-то подобное, но это не работает.
extension NSDate {
func changeDate(unitType: NSCalendarUnit, number: Int, date: NSDate) {
self.laterDate(NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: number,
toDate: date,
options: []
)!)
}
}
В другом файле я делаю что-то вроде этого:
let date = NSDate()
// set date to tomorrow
date.changeDate(.Day, number: 1, date: date)
Каково решение?
1 ответ
Решение
От NSDate
ссылка (выделение добавлено):
Объекты даты неизменны,...
и, следовательно, вы не можете мутировать self
в методе расширения. Вам придется вернуть новую дату как другую NSDate
объект, например
extension NSDate {
func changedDate(unitType: NSCalendarUnit, number: Int) -> NSDate {
return self.laterDate(NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: number,
toDate: self,
options: []
)!)
}
}
var date = NSDate()
date = date.changedDate(.Day, number: 1)