Как изменить себя в 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)
Другие вопросы по тегам