首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >URL.standardized和URL.absoluteURL有什么区别?

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

Stack Overflow用户
提问于 2017-04-06 14:25:39
回答 2查看 3.5K关注 0票数 8

在Swift的URL类中,有.standardized.absoluteURL属性(.standardizedURL.absoluteURL,以及Objective的NSURL中的.URLByStandardizingPath )。还有.standardizedFileURL

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

来自上述链接的文档:

斯威夫特

标准化 返回具有“..”实例的URL或者“。”从它的道路上移开。绝对​网址 返回绝对URL。 讨论 如果URL本身是绝对的,这将返回self。标准化​文件​URL 标准化文件URL的路径。 讨论 如果is​File​URLfalse,则此方法返回self

Objective-C

标准化​网址 带有"..“实例的URL副本或者“。”从它的道路上移开。(只读) 讨论 此属性包含一个新的NSURL对象,该对象使用接收方的路径初始化,并删除"..""."的任何实例。如果接收方不符合RFC 1808,则此属性包含零。绝对​网址 引用与接收方相同的资源的绝对URL。(只读) 讨论 如果URL已经是绝对的,则此属性包含接收方的副本。分辨率按照RFC 1808执行。​标准化​路径 使用绝对路径指向与原始URL相同的资源的URL。(只读) 讨论 此属性仅适用于文件:​路径方案的URL。对于所有其他URL,它返回原始URL的副本。 与string​By​Standardizing​Path一样,该属性可以在提供的URL中进行以下更改: 使用string​By​Expanding​Tilde​In​Path展开初始倾斜表达式。将空组件和对当前目录(即序列“//”和“/./”)的引用减少到单路径分隔符。在绝对路径中,解析对父目录的引用(即组件“..”)如果可能的话,可以使用string​By​Resolving​Symlinks​In​Path到真正的父目录,它会参考文件系统来解析每个潜在的符号链接。 在相对路径中,由于无法解析符号链接,因此对父目录的引用将保留在适当的位置。如果结果仍然指示存在的文件或目录(通过查阅文件系统检查),则从路径中删除“/private”的初始组件。 请注意,此属性所包含的路径可能仍然包含符号链接组件。还请注意,此属性仅适用于文件路径(例如,URL的字符串表示形式)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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移除路径中的任何前导..组件。

示例:

代码语言:javascript
复制
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"
票数 4
EN

Stack Overflow用户

发布于 2019-05-31 19:17:41

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

代码语言:javascript
复制
~ 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,通常应该使用标准化路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43258046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档