Я, кажется, подобрали несколько ошибок, так как обновление для быстрой 3GooglePlaces API Swift 3 Выпуск
// Issue #1
let correctedAddress:String! = self.searchResults![(indexPath as NSIndexPath).row].addingPercentEncoding(withAllowedCharacters: CharacterSet.symbols)
print(correctedAddress)
let url = URL(string: "https://maps.googleapis.com/maps/api/geocode/json?address=\(correctedAddress)&sensor=false")
let task = URLSession.shared.dataTask(with: url!) {
data, response, error in
do {
if data != nil{
let dic = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableLeaves) as! NSDictionary
// Issue #2
let results = dic["results"] as! [String: Any]
let geometry = results["geometry"] as! [String: Any]
let location = geometry["location"] as! [String: Any]
let lat = location["lat"] as! Double
let lon = location["lng"] as! Double
self.delegate.locateWithLongitude(lon, andLatitude: lat)
}
}
catch {
print("Error")
}
}
task.resume()
выпуск № 1: correctedAddress, в качестве примера, возвращает значение "%51%75%C3%A9%62%65%63%2C%20%43%61%6E%61%64%61"
. Тем не менее, по какой-то причине константа url возвращает nil и вызывает сбой.
Я не понимаю, почему он возвращает нуль. Я могу заменить correctedAddress
внутри URL-адреса со значением %51%75%C3%A9%62%65%63%2C%20%43%61%6E%61%64%61
, поэтому полный URL-адрес:
let url = NSURL(string: "https://maps.googleapis.com/maps/api/geocode/json?address=%51%75%C3%A9%62%65%63%2C%20%43%61%6E%61%64%61&sensor=false")
и он отлично работает.
выпуск № 2: Он падает как раз в let results
, к которому я вернусь ошибку Could not cast value of type '__NSArrayI' (0x108bb0c08) to 'NSDictionary' (0x108bb1108).
Вопрос №2 решен, но вопрос № 1 не является. Не могли бы вы объяснить, почему он решает проблему №2 и почему мой код не работает? – luke
На самом деле проблема связана не с вашим кодом, а с сервером, возвращающим ответ. Также в Swift 3 при вычислении переменной в значение с помощью '\()' для конкатенации или для каких-либо других целей вы не применяете восклицательный знак в конце, то есть '!', Тогда он попытается создать URL-адрес с чем-то например: 'https://maps.googleapis.com/maps/api/geocode/json?address=Optional("%51%75%C3%A9%62%65%63%2C%20%43%61 % 6E% 61% 64% 61 ")! & Sensor = false", который возвращает Url как nil, так что это причина для проблемы 1, поэтому, глядя на это, попробуйте отладить код проблемы 1, будет очень небольшая проблема –
И что касается выпуска2 Проблема в том, что ответ от сервера все испорчен, поэтому мне пришлось много раз поиграть и выяснить, какой тип должен отличать ответ как. Хотя интересный вопрос, так что я открыл игровую площадку и начал ying с типом ответа и wallah .. Он был разрешен к счастью :) Cheers !! –