Я знаю, как сделать try-catch из одной функции. Но проблема в том, что я хочу попытаться поймать весь блок кода - просто, если что-то пойдет не так, проигнорируйте весь блок.
Позвольте мне показать вам простой пример. Это простой парсер из Facebook graph 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 я бы просто попытался поймать весь блок. Но в быстром я не знаю, как это сделать. Более того, компилятор говорит, что "как!" (поэтому разворачивание необязательного значения) не может вызвать исключение, которое является ложным :)