Swift 2:调用可以抛出,但它没有用'try'标记并且错误没有被处理
Posted
技术标签:
【中文标题】Swift 2:调用可以抛出,但它没有用\'try\'标记并且错误没有被处理【英文标题】:Swift 2 : Call can throw, but it is not marked with 'try' and the error is not handledSwift 2:调用可以抛出,但它没有用'try'标记并且错误没有被处理 【发布时间】:2016-04-01 22:23:17 【问题描述】:我从 Swift 2 开始,在尝试完成尝试使用 iTunes API 的函数时遇到此错误。
func searchItunesFor(searchTerm: String)
let itunesSearchTerm = searchTerm.stringByReplacingOccurrencesOfString(" ", withString: "+", options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil)
if let escapedSearchTerm = itunesSearchTerm.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
let urlPath = "http://itunes.apple.com/search?term=\(escapedSearchTerm)&media=software"
let url = NSURL(string: urlPath)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: data, response, error -> Void in
print("Task completed")
if(error != nil)
print(error!.localizedDescription)
var err: NSError?
if let jsonResult = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary
if(err != nil)
print("JSON Error \(err!.localizedDescription)")
if let results: NSArray = jsonResult["results"] as? NSArray
dispatch_async(dispatch_get_main_queue(),
self.tableData = results
self.appsTableView!.reloadData()
)
)
task.resume()
我得到错误:“”调用可以抛出,但它没有用“try”标记,错误没有被处理“”在这一行
if let jsonResult = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary
if(err != nil)
这个问题的解决方案是什么? 谢谢
【问题讨论】:
Swift 2: Call can throw, but it is not marked with 'try' and the error is not handled的可能重复 【参考方案1】:这是因为并非所有NSData
都可以转换为 JSON 对象。用这个替换那个 JSON 解析部分:
do
if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as? NSDictionary
dispatch_async(dispatch_get_main_queue(),
self.tableData = results
self.appsTableView!.reloadData()
)
catch let jsonError as NSError
print(jsonError.localizedDescription)
【讨论】:
【参考方案2】:你也可以像这样使用 somehting.. 使用,ObjectMapper,SwiftyJSON,Alafir
guard let jsonResponce = try? JSON(data: data) else
print("\n\n\n\n error :\(AppAlertMsg.kErrorMsg) \n\n URL:\(urlString) \n\n paramaters:\(JSON(paramaters as Any))\n\n\n\n")
failure("error")
return
【讨论】:
以上是关于Swift 2:调用可以抛出,但它没有用'try'标记并且错误没有被处理的主要内容,如果未能解决你的问题,请参考以下文章
“调用可以抛出,但它没有用'try'标记并且错误没有处理“[重复]
Swift 2 jSON Call 可以抛出,但没有用 try 标记
Swift 2.2 HealthKit - 调用可以抛出,但它没有标有“尝试”并且错误未处理