为什么我不能将此String转换为URL?

时间:2017-02-03 17:27:36

标签: ios swift string url webview

我有关于网址和网页视图的x 2个问题。

问题1: 我有一个字符串,我从API应该是一个网址。字符串为https://godochurch.blob.core.windows.net/sermons/1031/30-1-2017-Vision Sunday-Devotion.mp3

当尝试转换为网址时,我得到的是

以下是代码:

if let sermonUrl = sermonUrl {

        if let url = URL(string: sermonUrl) {

            let requestObj = URLRequest(url: url)
            webView.loadRequest(requestObj)

        }
    }

我已经确定了“视觉”与“视觉”之间的空间。和周日'是问题。

在尝试将字符串转换为URL之前,我是否应该以某种方式对字符串进行编码?令人困惑的是,如果我将字符串粘贴到我的浏览器中它工作得很好,但我注意到浏览器是对空间进行编码的百分比。

如果我应该编码字符串,我该怎么做?

问题2: 我看到URL(string: "urlStringHere")仅适用于iOS 10.我的应用程序需要适用于iOS 9.如何转换上述代码,以便在iOS 9和10上运行。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:2)

1:使用%20+

逃离该空格
if let url = URL(string: "https://godochurch.blob.core.windows.net/sermons/1031/30-1-2017-Vision%20Sunday-Devotion.mp3") {
    // ...
}

2:URL与Swift 3一起推出,它与iOS 8及更高版本兼容。有关如何使其适用于旧版iOS的信息,请参阅this question

修改:百分比转义网址的最简单方法是使用URLComponents

var components = URLComponents(string: "https://godochurch.blob.core.windows.net")!
components.path = "/sermons/1031/30-1-2017-Vision Sunday-Devotion.mp3"

if let url = components.url {
    // ... 
}

如果您碰巧从Web服务获取URL字符串并且它包含空格,那么该服务很糟糕。 URL中不允许使用空格。 Web浏览器放宽了这个规则,因为他们知道那里有糟糕的URL。斯威夫特不会接受它。