【问题标题】:UrlByAppendingPathComponent vs UrlByAppendingPathExtensionUrlByAppendingPathComponent 与 UrlByAppendingPathExtension
【发布时间】:2014-03-12 22:53:17
【问题描述】:

我已阅读文档,看起来某些边缘情况可能不同(斜杠等),但我不清楚这两种方法之间的主要区别是什么。组件和扩展这两个术语在我以外的人理解的 URL 世界中是否具有特殊含义?

【问题讨论】:

    标签: objective-c ios ios5


    【解决方案1】:

    路径扩展用于将.html 之类的内容添加到URL,路径组件用于添加/news/local 之类的内容。路径扩展的文档:

    如果原始 URL 以一个或多个正斜杠结尾,则这些正斜杠将从返回的 URL 中删除。在新 URL 的两个部分之间插入一个句点。

    所以http://hello.com/news/ 会变成http://hello.com/news.html

    路径组件的文档:

    如果原始 URL 不以正斜杠结尾并且 pathComponent 不以正斜杠开头,则在返回的 URL 的两部分之间插入正斜杠,除非原始 URL 是空字符串。

    所以http://hello.com/news/ 会变成http://hello.com/news/html

    这是一个快速测试:

    NSURL *originalURL = [NSURL URLWithString:@"http://hello.com/news"];
    NSLog(@"%@", [originalURL URLByAppendingPathComponent:@"local"]);
    NSLog(@"%@", [originalURL URLByAppendingPathExtension:@"local"]);
    

    输出:

    http://hello.com/news/local
    http://hello.com/news.local
    

    【讨论】:

    • 所以,事实证明这些方法都不是我真正想要的。我猜扩展名意味着文件扩展名,组件意味着“斜线之间的节点”。事实上,如果你使用 append with component,你添加的组件会被插入到 URL 中的任何查询参数之前。这一点从文档中并不清楚,这就是我提出问题的原因。我不得不回到一个字符串,做工作,然后再次转换为一个 url。无论如何,这个答案是应该如何使用这些方法的一个很好的例子。
    【解决方案2】:

    每当我对这样的事情有疑问,而文档没有帮助时,我只是在逻辑测试中对其进行测试。

    NSURL *baseURL = [NSURL URLWithString:@"http://foo.com/bar/baz"];
    NSURL *appendExtension = [baseURL URLByAppendingPathExtension:@"qux"];
    NSURL *appendComponent = [baseURL URLByAppendingPathComponent:@"qux"];
    
    STAssertEqualObjects([appendExtension absoluteString], @"http://foo.com/bar/baz.qux", nil);
    STAssertEqualObjects([appendComponent absoluteString], @"http://foo.com/bar/baz/qux", nil);
    

    就是这样,扩展名是 .(file-type) 组件是 /(directory)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 2015-12-10
      相关资源
      最近更新 更多