【问题标题】:Swift 3: Internal Extension to Set TimeSwift 3:设置时间的内部扩展
【发布时间】:2016-09-05 21:39:08
【问题描述】:

我有这个在 Swift 3 中似乎不再工作的内部日期扩展:

internal extension DateComponents {
    func to12pm() {
        self.hour = 12
        self.minute = 0
        self.second = 0
    }
}

错误信息是:

无法分配给属性:'self' 是不可变的

如何在 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: [])!
} 

现在在 Swift 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)!)!
}

【问题讨论】:

    标签: swift3 nscalendar


    【解决方案1】:

    DateComponents 现在是一个结构,这就是它抛出该错误的原因:

    无法分配给属性:'self' 是不可变的

    你需要从self创建一个新的var,改变它并返回它如下:

    extension DateComponents {
        var to12pm: DateComponents {
            var components = self
            components.hour = 12
            components.minute = 0
            components.second = 0
            components.nanosecond = 0
            return components
        }
    }
    

    【讨论】:

    • 谢谢。我还发现我可以在“func to12pm”之前添加“可变”。两者都实现相同的目标吗?
    • 是的,不会有任何影响
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 2017-12-06
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多