ios – 如何在Swift 3中将NSData转换为数据?
发布时间:2020-12-14 18:56:32 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个简单的天气应用程序来抓取用户的位置,并使用Google Maps api显示简单的天气数据.一切正常,除了这部分我拿 JSON并获取地址. func getAddressForLatLng(latitude: String,longitude: String) { let url = NSURL(string: "(baseUrl)latlng=
我正在尝试创建一个简单的天气应用程序来抓取用户的位置,并使用Google Maps api显示简单的天气数据.一切正常,除了这部分我拿
JSON并获取地址.
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.您应该使用Swift类型的数据.要从NSData转换?到数据?,只需添加为数据?到变量声明的结尾.
此外,您的类型是可选的,但您不能传入可选类型,因此您需要打开它(在此示例中,使用data = data {/ * stuff here * /}): func getAddressForLatLng(latitude: String,(longitude)&key=(apikey)") let data = NSData(contentsOf: url! as URL) as Data? // <==== Added 'as Data?' if let data = data { // <====== Added 'if let' 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 当你转换为类型Dictionary时,编译器不知道你在说什么,因为Dictionary是generic type.所以你需要强制转换为Dictionary< String,AnyObject>或[String:AnyObject](它们是相同的). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |