URL.standardized和URL.absoluteURL有什么区别?

Ben*_*ero 5 url swift

在Swift的URL类中,有.standardized.absoluteURL属性(.standardizedURL.absoluteURL.URLByStandardizingPath在Objective-C的NSURL中)。也有.standardizedFileURL

我不知道所有这些之间有什么区别,但是必须有一个,因为它们提供了所有这些,对吧?我的意思是很明显,.standardizedFileURL的意思是仅处理文件URL,但是除此之外(例如,如果所有都在文件URL上调用),有什么区别?


从上面链接的文档中:

迅速

标准化的

返回一个URL,该URL的任何实例都从其路径中删除“ ..”或“。”。

绝对网址

返回绝对URL。

讨论区

如果URL本身是绝对的,则将返回self。

标准化的文件URL

标准化文件URL的路径。

讨论区

如果is?File?URLfalse,则此方法返回self

目标C

标准化网址

URL副本,其中包含“ ..”或“。”的任何实例 从其路径中删除。(只读)

讨论区

此属性包含一个新NSURL对象,该对象使用接收者的路径(带有"..""."删除的任何实例)初始化。如果接收方不符合RFC 1808,则此属性包含nil。

绝对网址

指向与接收者相同资源的绝对URL。(只读)

讨论区

如果URL已经是绝对的,则此属性包含接收者的副本。根据RFC 1808执行解析。

URL通过标准化路径

使用绝对路径指向与原始URL相同资源的URL。(只读)

讨论区

该属性仅适用于带有以下文件的URL:路径方案。对于所有其他URL,它将返回原始URL的副本。

像一样string?By?Standardizing?Path,此属性可以在提供的URL中进行以下更改:

使用扩展初始代字号表达式string?By?Expanding?Tilde?In?Path。将空组件和对当前目录的引用(即序列“ //”和“ /./”)减少为单个路径分隔符。仅在绝对路径中,如果可能的话,使用string?By?Resolving?Symlinks?In?Path,将对父目录(即组件“ ..”)的引用解析为真实的父目录,该引用会查询文件系统以解析每个潜在的符号链接。

在相对路径中,由于无法解析符号链接,因此将保留对父目录的引用。如果结果仍然指示现有文件或目录(请咨询文件系统进行检查),则从路径中删除“ / private”的初始组件。

请注意,此属性包含的路径中可能仍包含符号链接组件。还要注意,此属性仅适用于文件路径(例如,URL的字符串表示形式)。

rob*_*off 4

如果url是绝对 URL,url.absoluteURL == url则 .

如果url是相对 URL 并且具有非 nil baseURL,则通过解析上下文中url.absoluteURL的相对性返回绝对 URL (因此)。urlbaseURLurl.absoluteURL != url

如果url是相对 URL,url.standardized不会返回绝对 URL,并且实际上可能会返回解析方式与(!)不同的 URL,因为会删除路径的所有前导组件。urlurl.standardized..

例子:

let base = URL(string: "/sf/ask/3028063251/")!
// output: "/sf/ask/3028063251/"

let rel = URL(string: "../16176911", relativeTo: base)!
// output: "../../16176911 -- ttps://stackoverflow.com/q/43258046/77567"

rel.absoluteURL
// output: "/sf/ask/1132383801/"

rel.standardized
// output: "16176911 -- ttps://stackoverflow.com/q/43258046/77567"

rel.standardized.absoluteURL
// output: "/sf/ask/3028063251/"
Run Code Online (Sandbox Code Playgroud)