在Swift的URL类中,有.standardized和.absoluteURL属性(.standardizedURL和.absoluteURL,.URLByStandardizingPath在Objective-C的NSURL中)。也有.standardizedFileURL。
我不知道所有这些之间有什么区别,但是必须有一个,因为它们提供了所有这些,对吧?我的意思是很明显,.standardizedFileURL的意思是仅处理文件URL,但是除此之外(例如,如果所有都在文件URL上调用),有什么区别?
从上面链接的文档中:
标准化的
返回一个URL,该URL的任何实例都从其路径中删除“ ..”或“。”。
绝对网址
返回绝对URL。
讨论区
如果URL本身是绝对的,则将返回self。
标准化的文件URL
标准化文件URL的路径。
讨论区
如果
is?File?URL是false,则此方法返回self。
标准化网址
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的字符串表示形式)。
如果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)