在Swift的URL类中,有.standardized和.absoluteURL属性(.standardizedURL和.absoluteURL,以及Objective的NSURL中的.URLByStandardizingPath )。还有.standardizedFileURL。
我不知道所有这些之间有什么区别,但必须有一个,因为它们提供了所有这些,对吗?我的意思是,.standardizedFileURL显然只处理文件URL,但除此之外(例如,如果在文件URL上调用所有URL),有什么区别?
来自上述链接的文档:
斯威夫特
标准化 返回具有“..”实例的URL或者“。”从它的道路上移开。绝对网址 返回绝对URL。 讨论 如果URL本身是绝对的,这将返回self。标准化文件URL 标准化文件URL的路径。 讨论 如果
isFileURL为false,则此方法返回self。
Objective-C
标准化网址 带有"..“实例的URL副本或者“。”从它的道路上移开。(只读) 讨论 此属性包含一个新的
NSURL对象,该对象使用接收方的路径初始化,并删除".."或"."的任何实例。如果接收方不符合RFC 1808,则此属性包含零。绝对网址 引用与接收方相同的资源的绝对URL。(只读) 讨论 如果URL已经是绝对的,则此属性包含接收方的副本。分辨率按照RFC 1808执行。标准化路径 使用绝对路径指向与原始URL相同的资源的URL。(只读) 讨论 此属性仅适用于文件:路径方案的URL。对于所有其他URL,它返回原始URL的副本。 与stringByStandardizingPath一样,该属性可以在提供的URL中进行以下更改: 使用stringByExpandingTildeInPath展开初始倾斜表达式。将空组件和对当前目录(即序列“//”和“/./”)的引用减少到单路径分隔符。在绝对路径中,解析对父目录的引用(即组件“..”)如果可能的话,可以使用stringByResolvingSymlinksInPath到真正的父目录,它会参考文件系统来解析每个潜在的符号链接。 在相对路径中,由于无法解析符号链接,因此对父目录的引用将保留在适当的位置。如果结果仍然指示存在的文件或目录(通过查阅文件系统检查),则从路径中删除“/private”的初始组件。 请注意,此属性所包含的路径可能仍然包含符号链接组件。还请注意,此属性仅适用于文件路径(例如,URL的字符串表示形式)。
发布于 2019-05-31 19:35:40
如果url是绝对URL,则为url.absoluteURL == url。
如果url是一个相对URL,并且具有非零baseURL,那么url.absoluteURL通过解析baseURL上下文中url的相关性(以及url.absoluteURL != url)返回一个绝对URL。
如果url是一个相对URL,则url.standardized会执行而不是返回一个绝对URL,并且实际上可能返回一个与url (!)不同的解析方式的URL。因为url.standardized移除路径中的任何前导..组件。
示例:
let base = URL(string: "https://stackoverflow.com/q/43258046/77567")!
// output: "https://stackoverflow.com/q/43258046/77567"
let rel = URL(string: "../16176911", relativeTo: base)!
// output: "../../16176911 -- ttps://stackoverflow.com/q/43258046/77567"
rel.absoluteURL
// output: "https://stackoverflow.com/q/16176911"
rel.standardized
// output: "16176911 -- ttps://stackoverflow.com/q/43258046/77567"
rel.standardized.absoluteURL
// output: "https://stackoverflow.com/q/43258046/16176911"发布于 2019-05-31 19:17:41
我认为关键的区别在于,具有不同绝对路径的两个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,通常应该使用标准化路径。
https://stackoverflow.com/questions/43258046
复制相似问题