Google Directions Api网址返回nil

时间:2018-04-13 00:49:44

标签: json swift google-maps-sdk-ios directions swift4.1

我正在尝试使用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
    }

2 个答案:

答案 0 :(得分:1)

原因

url = URL(string: urlString)

失败是因为urlString包含空格。

从技术上讲,URL的格式是严格的。

浏览器按原样接受它,因为它会在发送之前自动修复它。

在您的情况下,您只需删除 originCoordinateString destinationCoordinateString 变量中的空格。

  • Boober。

答案 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进行转义,具体取决于应用程序,但应尽可能避免使用它们。