swift3 - 如何使用 URL(string : ,relativeTo:) 在 swift 3/4 中构造 url

标签 swift3 swift4

我正在尝试在 swift 3 中构造一个 url,但我不明白为什么它没有将字符串正确附加到 baseURL,输出不是我所期望的。在 swift 2 中它工作得很好。

let token = "12token34"

let baseURL = URL(string: "https://api.mysite.net/map/\(token)/")

let desiredURL = URL(string: "37.8267,-122.4233", relativeTo: baseURL as URL?)

结果

37.8267,-122.4233 -- https://api.mysite.net/map/12token34/

我期待以下结果:

https://api.mysite.net/map/12token34/37.8267,-122.4233

最佳答案

初始化器正在做你认为它应该做的事情;令人困惑的是 URL 的字符串表示形式。在 REPL 中:

1> import Foundation
2> let token = "12token34"
token: String = "12token34"
3> let baseURL = URL(string: "https://api.mysite.net/map/\(token)/")
baseURL: URL? = "https://api.mysite.net/map/12token34/"

到目前为止一切顺利;现在是令人困惑的部分:

4> let desiredURL = URL(string: "37.8267,-122.4233", relativeTo: baseURL as URL?)
desiredURL: URL? = "37.8267,-122.4233 -- ttps://api.mysite.net/map/12token34/"

这是一个相对 URL 对象,但它实际上代表了您期望的 URL:

5> desiredURL!.absoluteString
$R0: String = "https://api.mysite.net/map/12token34/37.8267,-122.4233"

如果您想要绝对形式,可以使用 absoluteURL 获取:

6> desiredURL!.absoluteURL
$R1: URL = "https://api.mysite.net/map/12token34/37.8267,-122.4233"

请注意,这也适用于更多情况:

1> import Foundation
2> let base = URL(string: "http://example.org/foo/bar/baz.txt")
base: URL? = "http://example.org/foo/bar/baz.txt"

同一目录中的 sibling :

3> let sib = URL(string: "./qux.txt", relativeTo: base!)
sib: URL? = "./qux.txt -- ttp://example.org/foo/bar/baz.txt"
4> sib!.absoluteURL
$R0: URL = "http://example.org/foo/bar/qux.txt"

向上目录树并返回:

5> let cousin = URL(string: "../corge/garply.txt", relativeTo: base!)
cousin: URL? = "../corge/garply.txt -- ttp://example.org/foo/bar/baz.txt"
6> cousin!.absoluteURL 
$R1: URL = "http://example.org/foo/corge/garply.txt"

一直到根并返回:

7> let fromRoot = URL(string: "/waldo/fred.txt", relativeTo: base!)
fromRoot: URL? = "/waldo/fred.txt -- ttp://example.org/foo/bar/baz.txt"
8> fromRoot!.absoluteURL
$R2: URL = "http://example.org/waldo/fred.txt"

关于swift3 - 如何使用 URL(string : ,relativeTo:) 在 swift 3/4 中构造 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40602225/

相关文章:

ios - 无法在 swift 中构建 kurento 工具箱,接收语法问题?

swift - 私有(private)集类及其方法 Swift 4

ios - 使用 NIB 无法识别 UITableViewCell 中单击的单元格 UITableView

ios - 将动画添加到以编程方式创建的 UIview

ios - Segue 数组没有通过为什么?

ios - 来自字符串的日期未在 UIDatePicker Swift 3 中设置

ios - 从入门/教程屏幕执行 segue

ios - 无法将此 JSON 转换为字符串

swift3 - Swift 3 中 `setImageWith(_:placeholderImage:usingActivityIndicatorStyle:)` 的使用不明确

swift - 从本地通知将 iPhone 变成 iBeacon