我需要从两个日期算起多少天,所以我使用了在网上找到的这段代码
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'
答案 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