对于有效的URL,NSURL返回nil

我有一个有效的Google地图url,如果您在浏览器中运行,则会显示地图图片。 但是,当我把它放在我的Swift代码中并尝试从String创建NSURL时,它返回nil

let urlString = "https://maps.googleapis.com/maps/api/staticmap?maptype=hybrid&center=37.33233141,-122.0312186&path=color:0xff0000|weight:10|37.33233141,-122.0312186|21.422570,%2039.826190&markers=color:blue%7Clabel:S%7C37.33233141,-122.0312186&markers=color:blue%7Clabel:S%7C21.422570,39.826190&zoom=1&size=1080x1920" let url = NSURL(string: urlString) 

目前,这个回报为零,我不知道为什么。 难道我做错了什么?

它应该工作:这就是http://www.url-encode-decode.com的原因

  let url = NSURL(string: urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!) 

由于上面的API被弃用,替代方法是

  let url = NSURL(string: urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!) 

查看Apple文档 :

此方法要求URLString仅包含正确形成的URL中允许的字符。 所有其他字符必须正确转义百分比。 使用UTF-8编码解释任何百分比转义字符。

可能在你的字符串中有一些不正确的东西,你需要在将它传递给NSURL之前对其进行编码,你可以通过stringByAddingPercentEncodingWithAllowedCharacters来做到这stringByAddingPercentEncodingWithAllowedCharacters

 if let encodedString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet() { url = NSURL(string: urlString) }