首页 > 解决方案 > 错误:二元运算符“-=”不能应用于“Int?”类型的操作数 和“诠释”

问题描述

这个类似的问题已经在 SO 上被问过很多次但是我仍然没有收到任何解决方案。我对 iOS 很陌生。所以请让我知道我是否在这里犯了任何错误..???

注意:我正在使用 Xcode 8 转换 Swift 2.3 - Swift 3.2

func dateFourHoursBack() -> Date {
    let today = Date()

    let calendar = Calendar.current
    var components = (calendar as NSCalendar).components([.year, .month, .day, .hour, .minute, .second] , from: today)
    components.hour -= 4 //Error : Binary operator '-=' cannot be applied to operands of type 'Int?' and 'Int

    return calendar.date(from: components)!
}

请帮我...

标签: iosswift

解决方案


这是一个糟糕的转换。不要NSCalendar在 Swift 3+ 中使用。

该错误表明您不能将-=运算符应用于可选。

与 Swift 3+ 中的 Swift 2 不同,所有日期组件都是可选的,但如果在该dateComponents(...行中指定了单位,您可以安全地强制展开它。

func dateFourHoursBack() -> Date {
    let today = Date()

    let calendar = Calendar.current
    var components = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second] , from: today)
    components.hour! -= 4    
    return calendar.date(from: components)!
}

顺便还有一个更方便的方法

func dateFourHoursBack() -> Date {
    return Calendar.current.date(byAdding: .hour, value: -4, to: Date())!
}

推荐阅读