当前位置:  开发笔记 > IOS > 正文

Swift NSDate扩展错误:Mutating对类或类绑定协议中的方法无效

如何解决《SwiftNSDate扩展错误:Mutating对类或类绑定协议中的方法无效》经验,为你挑选了1个好方法。

我正在尝试扩展,NSDate但我得到两个错误:

extension NSDate { //'mutating' isn't valid on methods in classes or class-bound protocols
    mutating func addMonth() {
        let calendar = NSCalendar.currentCalendar()
        let component = NSDateComponents()
        component.month = 1
        self = calendar.dateByAddingComponents(component, toDate: self, options: []) //Cannot assign to value: 'self' is immutable
    }
} 

我的猜测是,这NSDate是一个类而不是Swift类型,因为mutating类中的方法不能使用错误状态.如果我返回值并分配它一切正常但我想知道这不起作用的确切原因以及是否有更好的解决方法.



1> JAL..:

NSDate对象封装单个时间点,独立于任何特定的日历系统或时区.日期对象是不可变的,表示相对于绝对参考日期(2001年1月1日00:00:00 UTC)的不变时间间隔.

NSDate文档

因为NSDate对象是不可变的,所以不能随意添加一个月.您可以修改扩展程序以NSDate从现有日期返回新对象,并添加一个月:

extension NSDate {
    func addMonth() -> NSDate? {
        let calendar = NSCalendar.currentCalendar()
        let component = NSDateComponents()
        component.month = 1
        let newDate = calendar.dateByAddingComponents(component, toDate: self, options: [])
        return newDate
    }
}

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有