2016-01-16 2 views
2

Я начинаю быстро и без проблем. ошибка в этой строке:Generic Parameter 'Key' не может быть выведено Swift 2

let jsonDictionary try NSJSONSerialization.JSONObjectWithData = (data!, options: NSJSONReadingOptions.MutableContainers) as! Dictionary 
func searchItunesFor(searchTerm: String) { 
    let itunesSearchTerm = searchTerm.stringByReplacingOccurrencesOfString(" ", withString: "+", options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil) 
    let escapedSearchTerm = itunesSearchTerm.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) 
    let urlPath: String = "https://itunes.apple.com/search?term=\(escapedSearchTerm)&media=software" 
    let url: NSURL = NSURL(string: urlPath)! 
    let session = NSURLSession.sharedSession() 
    session.dataTaskWithURL(url, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
     do { 
      if let ipString = NSString(data:data!, encoding:NSUTF8StringEncoding){ 
       let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! Dictionary 

       let results: NSArray = jsonDictionary["results"] as NSArray 
       dispatch_async(dispatch_get_main_queue(), { 
        self.tableData = results 
        self.appsTableView?.reloadData() 
       }) 
      } 
     }catch{ 
      print("Bad ") 
     } 
    }).resume() 

ответ

0
let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary 
+2

Можете ли вы объяснить ваш ответ, так что другие пользователи имеют большую выгоду от этого? – Qbyte

+0

Хотя этот код может помочь решить проблему, он не объясняет _why_ и/или _how_, он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшит его долгосрочную образовательную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, включая ограничения и допущения. –

0

Я надеюсь, что это может помочь кто-то, даже если это немного поздно:

Проблема здесь в том, что вы пытаетесь бросить a JsonObject - Dictionary вместо NSDictionary.

Так что вам нужно только заменить DictionaryNSDictionary в вашем коде. Это должно позаботиться об ошибке.

Swift 2

let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 

Swift 3

let jsonDictionary = try JSONSerialization.JSONObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary 
0

Что работает для меня в Swift 3 является определение словаря ключевых типов значений.

if let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary<String, String>{ 
    // something happens here 
} 

Обратите внимание на NSDictionary<String, String> в конце этой строки.

Это если ваш объект выглядит это, конечно:

{ 
    "someProp" : "some value", 
    "someOtherProp" : "some other value" 
} 

Если вы не знаете значение вы получаете, и это может быть любой объект с помощью NSDictionary<String, Any>