斯威夫特3:内部分机设置时间
问题描述:
我必须出现在斯威夫特3不再工作,这种内部日期延长:斯威夫特3:内部分机设置时间
internal extension DateComponents {
func to12pm() {
self.hour = 12
self.minute = 0
self.second = 0
}
}
的错误信息是:
Cannot assign to property: 'self' is immutable
如何实现这在Swift 3中?
附加信息(如果需要):
func endOfWeek(_ weekday: Int) -> Date? {
guard
let cal = Calendar.current,
var comp: DateComponents = (cal as Calendar).components([.weekOfYear], from: self)
else {
return nil
}
comp.weekOfYear = 1
comp.day -= 1
comp.to12pm()
return (cal as NSCalendar).date(byAdding: comp, to: self.startOfWeek(weekday)!, options: [])!
}
现在看起来是这样的斯威夫特3:
func endOfWeek(_ weekday: Int) -> Date? {
let cal = Calendar.current
var comp = cal.dateComponents([.weekOfYear], from: self)
comp.weekOfYear = 1
comp.day? -= 1
//This does not have the "comp.to12pm()" that the Swift 2 version did
return cal.date(byAdding: comp, to: self.startOfWeek(weekday)!)!
}
答
DateComponents现在是一个结构,多数民众赞成它是由这个日期扩展名为为什么它抛出那个错误:
Cannot assign to property: 'self' is immutable
你n eed从自己创建一个新的变种,改变它并返回它如下:
extension DateComponents {
var to12pm: DateComponents {
var components = self
components.hour = 12
components.minute = 0
components.second = 0
components.nanosecond = 0
return components
}
}
谢谢。我还发现我可以在“func to12pm”之前添加“mutable”。两者都能达到同样的目的吗? –
是的,它不会有任何区别 –