我正在尝试扩展,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
类中的方法不能使用错误状态.如果我返回值并分配它一切正常但我想知道这不起作用的确切原因以及是否有更好的解决方法.
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 } }