无法通过日期扩展功能分配给Int

时间:2019-04-10 19:16:09

标签: ios swift

我需要从两个日期算起多少天,所以我使用了在网上找到的这段代码

extension Date {

    func years(_ sinceDate: Date) -> Int? {
        return Calendar.current.dateComponents([.year], from: sinceDate, to: self).year
    }

    func months(_ sinceDate: Date) -> Int? {
        return Calendar.current.dateComponents([.month], from: sinceDate, to: self).month
    }

    func days(_ sinceDate: Date) -> Int? {
        return Calendar.current.dateComponents([.day], from: sinceDate, to: self).day
    }

    func hours(_ sinceDate: Date) -> Int? {
        return Calendar.current.dateComponents([.hour], from: sinceDate, to: self).hour
    }

    func minutes(_ sinceDate: Date) -> Int? {
        return Calendar.current.dateComponents([.minute], from: sinceDate, to: self).minute
    }

    func seconds(_ sinceDate: Date) -> Int? {
        return Calendar.current.dateComponents([.second], from: sinceDate, to: self).second
    }  
}

这是Date类的扩展。

使用这些功能时遇到问题,我有这个功能

func countDays() {
        if let daysLeft = Date.days(targetDate) {
            self.daysLeft = daysLeft
        }
    }

但是Xcode告诉我

用于条件绑定的初始化程序必须具有可选类型,而不是'(Date)-> Int?'

所以,然后我尝试了此功能

func countDays() {
        let daysLeft = Date.days(targetDate)
        self.daysLeft = daysLeft
    }

还是Xcode告诉我

无法分配类型为'(Date)-> Int?'的值键入“ Int”

我尝试构建项目几次,因为我认为这可能是一个错误,但问题仍然存在。

谁能指出这里的问题是什么?预先感谢!

编辑:我已经尝试过像这样强制退回返回的值

func years(_ sinceDate: Date) -> Int {
        return Calendar.current.dateComponents([.year], from: sinceDate, to: self).year!
    }

仍然Xcode告诉我同样的事情 不能将类型为((Date)-> Int'的值分配为类型为'Int'

2 个答案:

答案 0 :(得分:2)

您正在以Date类型调用该函数。但是,该功能不是static。您必须创建一个日期实例并在该实例上调用该函数:

let now = Date()
if let daysLeft = now.days(targetDate) {
   self.daysLeft = daysLeft
}

答案 1 :(得分:0)

为什么不使用Calendar类的标准功能

let days = Calendar.current.dateComponents([.day], from: date1, to: date2)

示例

let date1 = Date(timeIntervalSinceNow: -800000)
print(date1)
let date2 = Date()
print(date2)

let days = Calendar.current.dateComponents([.day], from: date1, to: date2)
if let count = days.day {
    print(count)
}

产量

  

2019-04-01 13:24:14 +0000
  2019-04-10 19:37:34 +0000
  9