在objective-c中获取NSURL的一部分

时间:2010-09-11 22:37:26

标签: objective-c nsstring nsurl

我有一个NSString,其值为

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

如何在第3级之前获得所有内容?

http://digg.com/news/

2 个答案:

答案 0 :(得分:419)

请注意,这不完全是第三级。 URL的分割方式如下:

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

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

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

NSURL有多种访问者。您可以在NSURL类的文档中查看它们,访问URL的部分部分。如需快速参考:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] =(从//到网址末尾的所有内容)
  • -[NSURL user] = foobar
  • -[NSURL password] = nicate
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @ [“/”,“some”,“path”,“file.html”](请注意,初始/是其中的一部分)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-here
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] = baz

你想要的是这样的东西:

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

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

答案 1 :(得分:6)

Using Playground , language swift, I got this ! 游乐场提供了一种互动的方式来看到这一点。我希望你能喜欢这样做,这是一种学习NSURL的有趣方式,是iOS中的一个重要话题。