How to convert NSData to Data in Swift 3?
You need to change a couple things. First, you are using NSData
. You should be using the Swift type Data
. To convert from NSData?
to Data?
, just add as Data?
to the end of the variable declaration.
Also, Your type is optional, but you can't pass in an optional type, so you need to unwrap it (using, in this example, if let data = data { /* stuff here */}
):
func getAddressForLatLng(latitude: String, longitude: String) {
let url = NSURL(string: "\(baseUrl)latlng=\(latitude),\(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)"
}
}
}
}
Update:
Another thing you need to change is:
let json = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary
When you cast to the type Dictionary
, the compiler does not know what you are talking about because Dictionary
is a generic type. So you need to cast to Dictionary<String, AnyObject>
or [String: AnyObject]
(They are the same).
let nsdata = NSData()
let data = Data(referencing: nsdata)
https://developer.apple.com/documentation/foundation/data/3126627-init