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

Mel*_*ina 114 objective-c nsurl nsstring

我有一个值为的NSString

http://digg.com/news/business/24hr
Run Code Online (Sandbox Code Playgroud)

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

http://digg.com/news/
Run Code Online (Sandbox Code Playgroud)

zne*_*eak 427

请注意,这不完全是第三级.URL就像这样分割:

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

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

http://foobar:nicate@example.com:8080/some/path/file.html;params-here?foo=bar#baz
Run Code Online (Sandbox Code Playgroud)

NSURL有各种各样的访问者.您可以在NSURL课程文档中查看它们,访问URL部分.供快速参考:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] =(从//到URL末尾的所有内容)
  • -[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-在这里
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] =巴兹

但是你想要的是这样的:

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

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

  • 对于读这个的人:你需要得到`[url.pathComponents objectAtIndex:1]`而不是索引`0`,因为斜杠实际上是数组的元素,导致这个答案中的代码输出`http:// digg .COM //` (9认同)
  • digg.com?这篇文章多大了!;-) (2认同)

Kum*_*sav 6

使用Playground,语言迅速,我得到了这个! 游乐场提供了一种互动的方式来看到这一点.我希望你能喜欢这样做,这是一种有趣的方式来学习NSURL在iOS中的一个重要主题.