我正在尝试格式化我的时间戳,但是当我以其他格式获取时,我得到了calendar.dateComponents的错误。现在我试图在时间戳不同时抛出错误。我总是得到错误unexpectedly found nil while unwrapping an Optional value
,但它应该抛出错误。
do{
compMessage = try calendar.dateComponents([.hour, .minute], from: outputStringTimestamp!)
let minute = (String(format: "%02d", (compMessage?.minute!)!))
let hour = (String(format: "%02d", (compMessage?.hour!)!))
return "\(hour):\(minute)"
}catch{
return "0"
}
如果尝试不起作用,如何抛出错误?
答案 0 :(得分:0)
您无法捕获因强行展开可选值或强制转换而引发的错误。如果强制解包可选或强制转换值,则明确告诉编译器转换/解包应该总是成功并且可以不安全地完成,所以如果它不成功,则会出现运行时错误,这是一个编程错误,因为您使用了强制转换/展开。
使用安全可选的展开功能if let
或guard let
来安全地展开选项。
Do-catch块只能用于捕获明确标记为throw
的函数抛出的错误。
答案 1 :(得分:0)
正如其他答案/评论已经陈述的那样,您只能从标记为throwing
的函数中抛出。
相反,你可以创建一个这样的函数:
func formatDate(_ date: Date) -> String {
let calendar = Calendar.current
let components = calendar.dateComponents([.hour, .minute], from: date)
return String(format: "%02d:%02d", hour!, minute!)
}
let someDate = Date()
let formattedDate = formatDate(someDate) // "13:05"