二进制运算符'> ='不能应用于类型为'Date'和'Date?'的操作数

时间:2019-06-25 08:38:10

标签: swift date calendar

我正在尝试比较两个日期,一个是来自服务器的日期,另一个是我的本地设备时间。我不知道为什么会显示此错误。

            let deviceDate = Date()

            let calendar = Calendar.current
            let dateNewServer = calendar.date(byAdding: .minute, value: 120, to: dateFromServer!)

            //deviceDate -> 2019-06-25 08:28:03 +0000
            //dateFromServer -> 2019-06-21 20:00:00 +0000
            //dateNewServer -> 2019-06-21 22:00:00 +0000

            if (deviceDate >= dateFromServer) && (deviceDate <= dateNewServer){

                print("Live Matches")
            }else{
                print("Old/Upcoming Matches")
            }

3 个答案:

答案 0 :(得分:1)

这是因为您正在尝试比较Optional(Date)和Date类型。尝试展开您的dateFromServer变量。 例如

if (deviceDate >= dateFromServer!){
    print("Live Matches")
}else{
    print("Old/Upcoming Matches")
}

此外,您正在Date上比较StringdeviceDate <= "\(dateNewServer)"

答案 1 :(得分:1)

dateNewServeroptional。因此,您需要先将其拆开,然后再使用。这就是你的错误所表达的。

  

日期,fun date(通过添加组件:Calendar.Component,值:Int,到日期:   日期,包装组件:布尔=默认值)->日期?

解决方案:使用可选绑定 (if let)强制展开 (!)对其进行包装。 可选绑定是解开optional的更安全的方法。

if let dateNewServer = calendar.date(byAdding: .minute, value: 120, to: dateFromServer) {
    if deviceDate.compare(dateFromServer) == .orderedDescending && deviceDate.compare(dateNewServer) == .orderedAscending {
        print("Live Matches")
    } else {
        print("Old/Upcoming Matches")
    }
}

答案 2 :(得分:0)

   let checkGreaterDate = deviceDate.isGreaterThanDate(dateToCompare: dateFromServer!)
    let checkLesserDate = deviceDate.isLessThanDate(dateToCompare: dateNewServer!)
    if  checkGreaterDate && checkLesserDate{
        print("Live Matches")
    }else{
        print("Old/Upcoming Matches")
    }

辅助方法

    func isLessThanDate(dateToCompare: Date) -> Bool {
    //Declare Variables
    var isLess = false

    //Compare Values
    if self.compare(dateToCompare as Date) == ComparisonResult.orderedAscending {
        isLess = true
    }

    //Return Result
    return isLess
}


func isGreaterThanDate(dateToCompare: Date) -> Bool {
    //Declare Variables
    var isGreater = false

    //Compare Values
    if self.compare(dateToCompare as Date) == ComparisonResult.orderedDescending {
        isGreater = true
    }

    //Return Result
    return isGreater
}