使用Try,Catch无法处理错误的格式错误

时间:2017-08-18 10:59:23

标签: ios swift try-catch nsdateformatter

我正在尝试格式化我的时间戳,但是当我以其他格式获取时,我得到了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"

    }

如果尝试不起作用,如何抛出错误?

2 个答案:

答案 0 :(得分:0)

您无法捕获因强行展开可选值或强制转换而引发的错误。如果强制解包可选或强制转换值,则明确告诉编译器转换/解包应该总是成功并且可以不安全地完成,所以如果它不成功,则会出现运行时错误,这是一个编程错误,因为您使用了强制转换/展开。

使用安全可选的展开功能if letguard 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"