初始化 NSURLComponents 实例时,将 false 和 true 传递给“resolvingAgainstBaseURL”有什么区别?

问题描述 投票:0回答:2

我不明白这两种调用方式有什么区别:

NSURLComponents(URL: url, resolvingAgainstBaseURL: true)

NSURLComponents(URL: url, resolvingAgainstBaseURL: false)

而且我发现文档的解释很难理解...... 有人可以给我一个简单的例子来展示这个 api 是如何工作的吗? (我尝试了许多不同的参数组合,但它们产生的结果是相同的......)

swift url nsurl nsurlcomponents
2个回答
164
投票

仅当您从

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"

0
投票
  • 如果我们将某些路径组合到 baseUrl,那么我们设置 resolvingAgainstBaseURL: true

示例: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])
}
  • 如果我们不想对baseUrl做任何修改,那么我们设置resolvingAgainstBaseURL: false

示例: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])
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.