【发布时间】:2016-05-11 21:59:30
【问题描述】:
我知道如何从单个函数中进行 try-catch。但问题是我想尝试捕获整个代码块 - 如果出现问题很简单,忽略整个代码块。
让我给你看一个简单的例子。这是来自 Facebook 图形 api 的 /me/taggable_friends 的简单解析器:
let params:[NSObject : AnyObject] = ["fields": "first_name, last_name, id, picture"]
let request = FBSDKGraphRequest(graphPath: "/me/taggable_friends", parameters: params, HTTPMethod: "GET")
request.startWithCompletionHandler { (connection, result, error) -> Void in
if let error = error {
print(error)
}
else{
let resultDictionary:NSDictionary! = result as! [String: AnyObject]
let array = resultDictionary["data"] as! NSArray
for object in array {
let firstName = object["first_name"] as! String
let lastName = object["last_name"] as! String
let tagId = object["id"] as! String
let picture = object["picture"] as! NSDictionary
let pictureData = picture["data"] as! NSDictionary
let pictureUrl = pictureData["url"] as! String
let friend = FacebookFriend(firstName: firstName, lastName: lastName, tagId: tagId, picture: pictureUrl)
print(pictureUrl)
self.friends.append(friend)
}
}
}
该代码正在运行并且会悄悄地失败,因为错误不是零。但是假设 facebook 改变了一些东西,或者 json 中的某些值不可用。应用程序将崩溃。所以我必须为这段代码的几乎每一行都做 if-let 语句。很快它就会变得又长又难读。在java中,我只是为整个块做一个try-catch。但很快我不知道该怎么做。更重要的是编译器说“as!” (所以展开可选值)不能引发错误的异常:)
【问题讨论】: