我正在尝试使用Google方向API获取路线。到目前为止我所做的一切都有效。我有搜索功能,可以保存搜索到的位置(使用Google的建议位置),然后在那里放置一个标记。
我刚刚添加了一些代码,这些代码将使用Google Directions API从特定位置(在本例中为我当前位置)绘制地图。我的应用程序跟踪我的位置和一切都没有问题。
我一直得到"错误:无法创建网址"当我尝试创建URL时,我的后卫声明中出现错误我已经附上了下面的屏幕截图,但我又有点困惑。在哪里说key =那是我输入API密钥的地方。我显然没有在此屏幕截图中包含该内容,因为这样每个人都可以访问我的API密钥。
我继续使用打印的urlString(显示在控制台中)并将URL复制到我的网页,它完美地运行。它显示了我希望它显示的内容(据我所知),甚至在网页中没有密钥的情况下尝试它仍然有效。有没有人遇到过这个问题?我已经完成了传输安全域异常,所以那里没有问题。
我已附上以下代码。 currentLatitude / Longtitude和searchingLatitude / Longitude都是CLLocationDegrees类型。当前是我当前的位置坐标并搜索当用户搜索位置时返回给我的坐标
let currLat = String(currentLatitude)
let currLong = String(currentLongitude)
let seLat = String(searchedLatitude)
let seLong = String(searchedLongitude)
let originCoordinateString = "\(currLat), \(currLong)"
let destinationCoordinateString = "\(seLat), \(seLong)"
print(currentLatitude)
print(currentLongitude)
print(searchedLatitude)
print(searchedLongitude)
let urlString = "http://maps.googleapis.com/maps/api/directions/json?origin=\(originCoordinateString)&destination=\(destinationCoordinateString)&sensor=false"
print(urlString)
guard let url = URL(string: urlString) else {
print(urlString)
print ("Error: cannot create URL")
return
}
答案 0 :(得分:1)
原因
url = URL(string: urlString)
失败是因为urlString包含空格。
从技术上讲,URL的格式是严格的。
浏览器按原样接受它,因为它会在发送之前自动修复它。
在您的情况下,您只需删除 originCoordinateString 和 destinationCoordinateString 变量中的空格。
答案 1 :(得分:0)
正如我告诉过你的那样:你应该让你的代码在Playground中“按原样”运行(你的代码不是这样)。
然而,这很容易解决,所以无论如何它都在这里。这不会运行:
let originCoordinateString = "41, 23"
let destinationCoordinateString = "41, 24"
let urlString = "http://maps.googleapis.com/maps/api/directions/json?origin=\(originCoordinateString)&destination=\(destinationCoordinateString)&sensor=false"
print(urlString)
if let url = URL(string: urlString) {
print(url)
}else {
print(urlString)
print ("Error: cannot create URL")
}
这将
let originCoordinateString = "41,23"
let destinationCoordinateString = "41,24"
let urlString = "http://maps.googleapis.com/maps/api/directions/json?origin=\(originCoordinateString)&destination=\(destinationCoordinateString)&sensor=false"
print(urlString)
if let url = URL(string: urlString) {
print(url)
}else {
print(urlString)
print ("Error: cannot create URL")
}
因此,您的问题首先与JSON无关,而是与您创建的URL有关。当然:URL
初始化程序的错误“消息”充其量是最小的,但它可以做的很少(没有抛出异常也不好)。太空是一个很大的noo noo。如果你必须放置它们(显然不是这种情况),它们应该使用+
或%20
进行转义,具体取决于应用程序,但应尽可能避免使用它们。