gpt4 book ai didi

ios - Swift 中正确的错误处理

转载 作者:行者123 更新时间:2023-11-28 07:17:49 26 4
gpt4 key购买 nike

嘿 stackoverflow 成员,

我非常努力地在 Swift 上做得更好,现在我遇到了一个微不足道的问题。我以前是 C# 开发人员,所以错误处理直到现在都是 try {}... catch {}... Message... Done!

现在我正在开发一个使用一些 JSON API 的应用程序。一切正常,下载 JSON 数据,将它们打包到我的对象中,但有一个问题。正确的错误处理..

我有以下代码来下载和解析 JSON:

//Download & Parse JSON
func getJSON(urlToRequest: String) -> NSDictionary {

var url: NSURL = NSURL(string: urlToRequest)
var jsonRequest: NSURLRequest = NSURLRequest(URL: url)
var jsonResponse: AutoreleasingUnsafePointer<NSURLResponse?> = nil

var error: NSError?
var dataValue: NSData = NSURLConnection.sendSynchronousRequest(jsonRequest, returningResponse: jsonResponse, error:&error)

if error.description.isEmpty {
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataValue, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary

if error.description.isEmpty {
return jsonResult
}
else {
return NSDictionary(object: "Error: Something with parsing went wrong :(", forKey: "error")
}
}
else {
return NSDictionary(object: "Error: There was an error with your connection :(", forKey: "error")
}
}

错误部分只是暂时的,问题是我的 ViewController 只调用一个函数来获取一周的全部数据(天数、比赛等)

我这样调用它:

var rWrapper = RiotWrapper()
let lcsWeek: Week = rWrapper.getWeek("2014-07-07")

我的 getWeek 方法调用 3-4 个函数,这些函数全部解析与先前响应相关的 JSON 数据。

好吧,长话短说:如果 JSON 或 HTTP 失败,我想中止所有任务并只用错误消息填充我的 TableView,我该如何实现?

类似于:如果发生错误 -> 停止你正在做的任何事情 -> 例如返回一个 null erm.. nil for week -> print error

有人可以帮助我吗?如果有人根据这个主题进行一些演讲,那也很好:D

提前致谢!顺便说一句:对不起我的“糟糕”英语

最佳答案

包括 getWeek 在内的所有 JSON 解析方法都应该返回一个带有可选返回值和错误的元组。如果在任何时候您在 JSON 解析中的某个方法中遇到错误,请立即返回错误并使用 nil 作为返回值。链上的每个方法都应检查先前方法中的错误,如果发现错误,则立即返回错误:

func getWeek(string : String) -> (Week?, NSError) {
let (result, error) = self.otherMethod()
if error {
return (nil, error)
}

// continue happily ...
}

关于ios - Swift 中正确的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637102/

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