2016-09-19 17 views
2

プロジェクトをSwift 3に変換しようとしていて、このエラーが発生し続けています。私はこれ以外のすべてのエラーを修正しました。私はいくつかの人が問題を抱えているのを見ましたが、私はJSONを初めて使っているので、理解できませんでした。どんな助けでも大歓迎です。ここでタイプ 'Any'にSwift 3の下付きメンバがありません。Xcode 8

は私のコードです:

class func fetchPriceForSymbol(_ symbol: String, completion:@escaping (_ stock: StockPrice) ->()) { 

    DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default).async { 

     let url = URL(string: "http://finance.yahoo.com/webservice/v1/symbols/\(symbol)/quote?format=json") 
     let data = try? Data(contentsOf: url!) 

     do { 
      //let object = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) 
      let object = try! JSONSerialization.jsonObject(with: data!) 
      if let dictionary = object as? [String: AnyObject] { 
       let title = object["list"] as! NSDictionary 
       let title2 = title["resources"] as AnyObject! 
       let title3 = title2[0] as AnyObject! 
       let title4 = title3["resource"] as AnyObject! 
       let fields = title4["fields"] as AnyObject! 


       let stockPrice = StockPrice (
        price: fields["price"] as AnyObject! as! String 
       ) 

       DispatchQueue.main.async { 
        completion(stock: stockPrice) 
       } 
      } 
     } catch { 
      // Handle Error 
     } 



    } 
} 
+0

JSONデータツリーを追加できますか? – eshirima

+3

指定されていない( 'Any')オプションバインディングの後に' object'を使用しています。 'object'を' dictionary'に置き換えます。また、 'NSDictionary'ではなく' [String:Any] 'を使います。オブジェクトを 'AnyObject'より意味のあるものにキャストします。 – vadian

+0

辞書を指定するにはlet object = try! JSONSerialization.jsonObject(with:data!)? NSDictionary – AdamM

答えて

5

if let dictionary = object as? [String: AnyObject] 

を変更しようとすることができます

 let parsed = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any] 
     let list = parsed["list"] as! [String:Any]? 
     let resources = list?["resources"] as! [AnyObject]? 
     let fields = resources?[0] as! [String:Any]? 
     let resource = fields?["resource"] as! [String:Any]? 
     let fields2 = resource?["fields"] as! [String:Any]? 
     let price = fields2?["price"] as! String? 
-1

あなたが途中で構文解析部でこれを試してみてください

if let dictionary = object as? NSDictionary 
+4

**しないでください**。それは悪化し、問題を解決しません。 – vadian

関連する問題