这个类似的问题已多次在S.O.上提出过。但我仍然没有收到任何解决方案。我对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)!
}
Plz帮助我......
答案 0 :(得分:1)
这是一个糟糕的转换。不要在Swift 3 +中使用NSCalendar
。
错误表明您无法将-=
运算符应用于可选项。
与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())!
}
答案 1 :(得分:0)
因为components.hour
是可选值。您必须检查是否为OR,如果您100%确定它将包含值,则使用!
运算符强行打开它。
良好的做法是避免使用!
操作员强行打开并安全玩耍。喜欢这个
if let hours = components.hour {
//do your stuff here
}