问题描述
我在Swift中创建URL对象时遇到验证问题,当我尝试通过以下字符串创建URL对象时,返回nil:
我需要使用Google Maps Static API来获取地图的图像,包括以加密折线形式作为参数传递给url的路径。
我尝试使用以下方法转义网址:
addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
尽管折线已更改且不会绘制路径,但这样做可以创建URL对象。
您能给我任何建议吗?
PS。如果我输入的网址没有在浏览器中应用addingPercentEncoding
,它将显示预期的图像。
PPS。选择不将GMS SDK包含在项目中
-编辑-
嗨,我尝试了Duncan C建议的URLComponents解决方案,尽管我得到的结果与google编码路径失真相同。
var urlComponents = URLComponents()
urlComponents.scheme = "https"
urlComponents.host = "maps.googleapis.com"
urlComponents.path = "/maps/api/staticmap"
urlComponents.setQueryItems(with: params)
print(urlComponents.url?.absoluteString)
if let url = urlComponents.url { // generates wrong url }
解决方法
URL的不同部分需要不同的编码规则。
我建议使用系统类URLComponents
创建您的URL。这样,您可以指定URL的各个部分(不使用编码),然后查询URLComponents对象以获取URL。
编辑:
在我看来,问题在于折线参数的编码,因为您说这些参数未渲染。您应该包括指向Google静态地图API上Google文档部分的链接,该部分处理编码的折线,并显示编码折线参数的代码。
在“谷歌地图编码的折线swift”上进行的快速Google搜索产生了project on Github,该代码在Swift中实现了Google的折线编码器/解码器