URL init(string:relativeTo:) 工作错误

URL init(string:relativeTo:) works wrong

我试图通过 3 个步骤构建化合物 url,但结果是错误的!

// 1)
let baseURL = URL(string: "http://clapps.clappsa.com")!
print(baseURL.absoluteString)
// http://clapps.clappsa.com

// 2)
let extendedURL = baseURL.appendingPathComponent("public", isDirectory: true)
print(extendedURL.absoluteString)
// http://clapps.clappsa.com/public/

// 3)
let finalURL = URL(string: "/img/3-mentee.jpg", relativeTo: extendedURL)!
print(finalURL.absoluteString)
// http://clapps.clappsa.com/img/3-mentee.jpg

预期结果:

http://clapps.clappsa.com/public/img/3-mentee.jpg

即使我尝试像这样使用 extendedURLabsoluteURL

let finalURL = URL(string: "/img/3-mentee.jpg", relativeTo: extendedURL.absoluteURL)!
print(finalURL.absoluteString)
// http://clapps.clappsa.com/img/3-mentee.jpg

我会得到相同的结果。

奇怪,但这种方法可以与其他一些不同的 URL 一起使用。

您应该先删除 / 以获得预期结果:

let finalURL = URL(string: "img/3-mentee.jpg", relativeTo: extendedURL)!
print(finalURL.absoluteString) // http://clapps.clappsa.com/public/img/3-mentee.jpg

可以找到更详细的解释here