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