ios - 为什么我不能将此字符串转换为 URL?

标签 ios swift string url webview

我有 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/

相关文章:

ios - 简单动画链中的闪烁

ios - Swift:无法将 AnyObject 向下转换为 SKPhysicsBody

ios - 如何单击/迭代 coreData 实例

swift - 在 Swift 中通过下标访问单例属性

ios - 解雇 AVPlayerViewController 不会 'kill' 对象 - 它会持续存在

ios - 我如何在 iOS 中读取 ptr_refs 给出的引用?

c - 编写代码以在适当的位置反转 C 风格的字符串

iOS 在 if-else 语句后使用未声明的标识符

c - 反向显示输出的程序流程

java - 有人可以解释在 String 类中被覆盖的 toString 方法的源代码吗?