我有 x 2 个关于 url 和 webView 的问题。
问题一:
我有一个字符串,它是从应该是 url 的 API 中获取的。字符串是 https://godochurch.blob.core.windows.net/sermons/1031/30-1-2017-Vision Sunday-Devotion.mp3
当尝试转换为 url 时,我得到了 nil。
代码如下:
if let sermonUrl = sermonUrl {
if let url = URL(string: sermonUrl) {
let requestObj = URLRequest(url: url)
webView.loadRequest(requestObj)
}
}
我发现“Vision”和“Sunday”之间的空格是问题所在。
在尝试将其转换为 URL 之前,我是否应该以某种方式对字符串进行编码?令人困惑的是,如果我将字符串粘贴到我的浏览器中,它工作得很好,但我注意到浏览器对空格进行了百分比编码。
如果我应该对字符串进行编码,我该怎么做?
问题二:
我看到 URL(string: "urlStringHere")
仅适用于 iOS 10。我的应用程序需要适用于 iOS 9。如何转换上述代码以使其适用于 iOS 9 和 10。
提前感谢您的宝贵时间。
最佳答案
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 及更高版本。参见 this question了解如何使其与旧版本的 iOS 一起使用。
编辑:对 URL 进行百分号转义的最简单方法是使用 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。 Swift 不会接受它。
关于ios - 为什么我不能将此字符串转换为 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029799/