如何在NSDate扩展Swift中改变自我?

时间:2016-07-30 14:11:47

标签: ios swift nsdate swift-extensions

我正在尝试编写一个扩展,其中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 个答案:

答案 0 :(得分:3)

NSDate reference(强调添加):

  

日期对象不可变, ...

因此您无法在扩展方法中变异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)