我不明白这两种调用方式有什么区别:
NSURLComponents(URL: url, resolvingAgainstBaseURL: true)
和
NSURLComponents(URL: url, resolvingAgainstBaseURL: false)
而且我发现文档的解释很难理解...... 有人可以给我一个简单的例子来展示这个 api 是如何工作的吗? (我尝试了许多不同的参数组合,但它们产生的结果是相同的......)
仅当您从
NSURL
创建 URL 组件时才会产生影响
是相对于另一个NSURL
创建的:
let baseURL = NSURL(string: "http://server/foo/")!
let url = NSURL(string: "bar/file.html", relativeToURL: baseURL)!
print(url.absoluteString)
// "http://server/foo/bar/file.html"
使用
resolvingAgainstBaseURL == false
,URL 组件
仅代表 URL 的相关部分:
let comp1 = NSURLComponents(URL: url, resolvingAgainstBaseURL: false)!
print(comp1.string!)
// "bar/file.html"
使用
resolvingAgainstBaseURL == true
,URL 组件
代表完全解析的 URL:
let comp2 = NSURLComponents(URL: url, resolvingAgainstBaseURL: true)!
print(comp2.string!)
// "http://server/foo/bar/file.html"
示例:resolvingAgainstBaseURL:true
let baseURL = URL(string: "https://www.example.com")
let relativeURL = URL(string: "/search?query=swift&page=1", relativeTo: baseURL)
if let url = relativeURL {
let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true)
print(urlComponents?.scheme) // Prints: Optional("https")
print(urlComponents?.host) // Prints: Optional("www.example.com")
print(urlComponents?.path) // Prints: Optional("/search")
print(urlComponents?.queryItems) // Prints: Optional([query=swift, page=1])
}
示例:resolvingAgainstBaseURL: false
if let url = URL(string: "https://www.example.com/search?query=swift&page=1") {
let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)
print(urlComponents?.scheme) // Prints: Optional("https")
print(urlComponents?.host) // Prints: Optional("www.example.com")
print(urlComponents?.path) // Prints: Optional("/search")
print(urlComponents?.queryItems) // Prints: Optional([query=swift, page=1])
}