URL.standardized和URL.absoluteURL之间的区别是什么?

时间:2017-04-06 14:25:40

标签: swift url

在Swift的URL课程中,.standardized.absoluteURL属性(.standardizedURL.absoluteURL以及.URLByStandardizingPath位于Objective-C的NSURL)。还有.standardizedFileURL

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

来自上述文档:

夫特

  

标准化

     

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

  

绝对URL

     

返回绝对URL。

     

讨论

     

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

  

标准化的文件URL

     

标准化文件网址的路径。

     

讨论

     

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

的Objective-C

  

标准化的URL

     

带有" .."的任何实例的URL副本或"。"从它的路径中删除。 (只读)

     

讨论

     

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

  

绝对URL

     

与接收方引用相同资源的绝对URL。 (只读)

     

讨论

     

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

  

URLBy规范路径

     

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

     

讨论

     

此属性仅适用于具有以下文件的URL:path scheme。对于所有其他URL,它会返回原始URL的副本。

     

string​By​Standardizing​Path一样,此属性可以在提供的网址中进行以下更改:

     

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

     

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

     

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

2 个答案:

答案 0 :(得分:1)

我认为主要区别在于,具有不同绝对路径的两个URL实际上可能引用相同的资源,在这种情况下,它们将具有相同的标准化URL。可能导致这种情况的路径元素示例:

~ vs /absolute/path/to/user/home/directory
paths that include soft links
/path/to/thing vs /path/to/other/../thing
etc.

标准化url(迅速使用URL.standardizedFileURL)非常有用,因为指向同一文件的两个URL即使具有不同的绝对路径,也应具有相同的standardizedFileURL。因此,如果他们希望比较两个文件URL,通常应该使用标准化路径。

答案 1 :(得分:1)

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

如果url是相对URL且具有非nil baseURL,则url.absoluteURL通过在{的上下文中解决url的相对性来返回绝对URL。 {1}}(因此也是baseURL)。

如果url.absoluteURL != url是相对URL,则url不会返回绝对URL,实际上可能返回的URL与{{ 1}}(!),因为url.standardized删除了路径的任何前导url组成部分。

示例:

url.standardized