在Swift的URL
课程中,.standardized
和.absoluteURL
属性(.standardizedURL
和.absoluteURL
以及.URLByStandardizingPath
位于Objective-C的NSURL)。还有.standardizedFileURL
。
我不知道所有这些之间有什么区别,但必须有一个因为它们提供所有这些,对吧?我的意思是.standardizedFileURL
意味着只处理文件网址,但除此之外(例如,如果在文件网址上调用所有网址),区别的是什么?
来自上述文档:
标准化
返回从其路径中删除“..”或“。”的任何实例的URL。
绝对URL
返回绝对URL。
讨论
如果URL本身是绝对的,则返回self。
标准化的文件URL
标准化文件网址的路径。
讨论
如果
isFileURL
为false
,则此方法会返回self
。
标准化的URL
带有" .."的任何实例的URL副本或"。"从它的路径中删除。 (只读)
讨论
此属性包含一个新的
NSURL
对象,使用接收者的路径进行初始化,删除了".."
或"."
的所有实例。如果接收方不符合RFC 1808,则此属性包含nil。
绝对URL
与接收方引用相同资源的绝对URL。 (只读)
讨论
如果URL已经是绝对值,则此属性包含接收者的副本。根据RFC 1808执行解析。
URLBy规范路径
使用绝对路径指向与原始URL相同的资源的URL。 (只读)
讨论
此属性仅适用于具有以下文件的URL:path scheme。对于所有其他URL,它会返回原始URL的副本。
与
stringByStandardizingPath
一样,此属性可以在提供的网址中进行以下更改:使用
stringByExpandingTildeInPath
展开初始代字号表达式。 将空组件和对当前目录的引用(即序列“//”和“/./”)减少为单路径分隔符。 仅在绝对路径中,如果可能,使用stringByResolvingSymlinksInPath
将对父目录(即组件“..”)的引用解析为真实父目录,{{1}}将查询文件系统以解析每个潜在的符号链接。在相对路径中,由于无法解析符号链接,因此将保留对父目录的引用。 如果结果仍指示现有文件或目录,则从路径中删除“/ private”的初始组件(通过查阅文件系统进行检查)。
请注意,此属性包含的路径可能仍包含符号链接组件。另请注意,此属性仅适用于文件路径(例如,URL的字符串表示形式)。
答案 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