gpt4 book ai didi

swift - 如何将 `do-try-catch` 控件添加到下面的这个函数中?

转载 作者:行者123 更新时间:2023-11-28 10:05:01 27 4
gpt4 key购买 nike

如何在下面的这个函数中添加do-try-catch控件?

self.convertDateFromString("23282019111259318")

func convertDateFromString(stringDateTimeParameter : String)
{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMddyyyyHHmmssSSS"

guard let myDate = dateFormatter.date(from: stringDateTimeParameter) else {
fatalError("ERROR: Date conversion failed due to mismatched format.")}

print("myDate: \(myDate)")
}

如您所见,上面的示例。我发送 23 值作为一个月得到一个错误。然后应用程序被设备停止。我需要处理这种情况。应用程序不应停止,我应该在 catch 范围内看到 print(error)。

如何将 do-try-catch 控件添加到此函数中?我写了它,但我没有在 catch 范围内看到打印行。这就是我问的原因。

最佳答案

你不能让日期格式化程序抛出错误,但如果你愿意,你可以从这个方法中抛出错误,例如

enum DateConversionError: Error {
case unableToParseString
}

func dateFromString(stringDateTimeParameter: String) throws -> Date {
let formatter = DateFormatter()
formatter.dateFormat = "MMddyyyyHHmmssSSS"
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0) // or omit to use your current time zone

guard let date = formatter.date(from: stringDateTimeParameter) else {
throw DateConversionError.unableToParseString
}

return date
}

然后你可以做这样的事情:

do {
let date = try dateFromString(stringDateTimeParameter: "23282019111259318")
print(date)
} catch {
print(error)
}

话虽这么说,但感觉就像我们在扭曲自己以抛出错误。使用可选值更简单:

func dateFromString(stringDateTimeParameter: String) -> Date? {
let formatter = DateFormatter()
formatter.dateFormat = "MMddyyyyHHmmssSSS"
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0) // or omit to use your current time zone

return formatter.date(from: stringDateTimeParameter)
}

guard let date = dateFromString(stringDateTimeParameter: "23282019111259318") else {
print("unable to parse date")
return
}

// use `date` here

如果您要解析 Web API 响应,如果响应是 JSON 格式,我倾向于使用 JSONDecoder 并在 dateDecodingStrategy 中指定格式化程序:

let decoder = JSONDecoder()

let formatter = DateFormatter()
formatter.dateFormat = "MMddyyyyHHmmssSSS"
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)

decoder.dateDecodingStrategy = .formatted(formatter)

// use `decoder` to parse your JSON and it will handle conversions/errors for you

这引出了一个问题,为什么您使用 MMddyyyyHHmmssSSS 格式,而不是像 yyyy-MM-dd'T'HH:mm:ss.SSSX 这样的标准格式,但这是一个单独的问题。


最后,创建日期格式化程序是一个昂贵的过程。您真的不希望将其隐藏在您的 dateFromString 方法中,您可能会多次调用该方法。实例化格式化程序一次,然后让您的 dateFromString 方法使用已创建的格式化程序。

关于swift - 如何将 `do-try-catch` 控件添加到下面的这个函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com