2016-09-05 32 views
0

我必須出現在斯威夫特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)!)! 
} 

回答

1

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

是的,它不會有任何區別 –