私は、ユーザーの場所を把握し、Google Maps APIを使用して簡単な天気データを表示する簡単な天気アプリを作成しようとしています。私がJSONをとり、アドレスを取得するこの部分を除いて、すべてが機能しています。行でNSDataをSwift 3のデータに変換するには?
func getAddressForLatLng(latitude: String, longitude: String) {
let url = NSURL(string: "\(baseUrl)latlng=\(latitude),\(longitude)&key=\(apikey)")
let data = NSData(contentsOf: url! as URL)
let json = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary
if let result = json["results"] as? Dictionary {
if let address = result[0]["address_components"] as? Array {
let number = address[0]["short_name"] as! String
let street = address[1]["short_name"] as! String
let city = address[2]["short_name"] as! String
let state = address[4]["short_name"] as! String
let zip = address[6]["short_name"] as! String
weatherDisplay.text = "\(city),\(state)"
}
}
}
:
let json = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary
私はこのエラーを取得する:
Cannot invoke 'jsonObject' with an argument list of type '(with: NSData?, options: JSONSerialization.ReadingOptions)'
は私が間違って何をしているのですか?
全くここにNSDataの(またはNSURL)を使用する必要はありません。 'let url = URL(string:...)'、 'let data = Data(contentsOf:...)' –
問題はあなたが 'JSONSerialization'にオプションを渡していることです。データの展開を強制することができます。 'JSONSerialization.jsonObject(with:data !, options:JSONSerialization.ReadingOptions.allowFragments)を! Dictionary' –
Swift 3で 'NSData(contentsOf:url!as URL)'(または 'Data(contentsOf:)')を使うのは悪い考えです。これは同期呼び出しであり、完了するまでUIをフリーズします。 NSURLSessionを使用するには、これを実際に書き換える必要があります。 –