斯威夫特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 
    } 
} 
+0

谢谢。我还发现我可以在“func to12pm”之前添加“mutable”。两者都能达到同样的目的吗? –

+0

是的,它不会有任何区别 –