114

我有一个值为

http://digg.com/news/business/24hr

怎么才能在3级之前获得所有东西?

http://digg.com/news/
4

2 回答 2

438

请注意,这不完全是第三级。一个 URL 是这样拆分的:

  • 协议或方案(此处,http
  • ://分隔符
  • 用户名和密码(这里没有,但可能是username:password@hostname
  • 主机名(此处为digg.com
  • 端口(:80例如,在域名之后)
  • 路径(这里,/news/business/24hr
  • 参数字符串(分号后面的任何内容)
  • 查询字符串(如果您有 GET 参数,例如?foo=bar&baz=frob
  • 片段(如果您在链接中有一个锚点,例如#foobar)。

“功能齐全”的 URL 如下所示:

http://foobar:nicate@example.com:8080/some/path/file.html;params-here?foo=bar#baz

NSURL具有广泛的访问器。您可以在该类的文档中查看它们NSURL,部分访问 URL 的部分。快速参考:

  • -[NSURL scheme]= http
  • -[NSURL resourceSpecifier]=(从 // 到 URL 末尾的所有内容)
  • -[NSURL user]= 富吧
  • -[NSURL password]= 好
  • -[NSURL host]= example.com
  • -[NSURL port]= 8080
  • -[NSURL path]= /some/path/file.html
  • -[NSURL pathComponents]= @["/", "some", "path", "file.html"] (注意开头的 / 是它的一部分)
  • -[NSURL lastPathComponent]= 文件.html
  • -[NSURL pathExtension]= html
  • -[NSURL parameterString]= 参数-这里
  • -[NSURL query]= 富=酒吧
  • -[NSURL fragment]=巴兹

但是,您想要的是这样的:

NSURL* url = [NSURL URLWithString:@"http://digg.com/news/business/24hr"];
NSString* reducedUrl = [NSString stringWithFormat:
    @"%@://%@/%@",
    url.scheme,
    url.host,
    url.pathComponents[1]];

对于您的示例 URL,您似乎想要的是协议、主机和第一个路径组件。(返回的数组中索引 0 处的元素-[NSString pathComponents]只是“/”,因此您需要索引 1 处的元素。其他斜杠被丢弃。)

于 2010-09-11T22:59:55.240 回答
7

使用 Playground ,语言迅速,我明白了! Playground 提供了一种交互式的方式来查看这一点。我希望你也能享受同样的乐趣,这是一种学习 NSURL 的有趣方式,这是 iOS 中的一个重要主题。

于 2016-11-30T05:53:16.720 回答