2016-04-01 29 views
-2

我以Swift 2開頭,並且在嘗試完成試圖使用iTunes API的函數時出現此錯誤。Swift 2:調用可以拋出,但它沒有用'try'標記並且錯誤沒有被處理

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() 
    } 
} 

我得到的錯誤:「」呼叫可以拋出,但沒有打上「嘗試」和錯誤沒有被處理「」在這條線上

if let jsonResult = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary { 
      if(err != nil) { 

有什麼解決這個問題? 謝謝

+1

的可能的複製[斯威夫特2:呼叫可以拋出,但它沒有標記'嘗試'和錯誤不處理](http://stackoverflow.com/questions/30737262/swift-2-call-can-throw-but-it-is-not-marked- with-try-and-the-error-is-not-ha) – NobodyNada

回答

2

這是因爲不是所有的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) 
} 
+0

非常感謝,我現在沒有錯誤 –

-1

您也可以使用服用點這樣的.. 使用,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 
     } 
相關問題