Get parts of a NSURL in objective-c

前端 未结 2 977
北荒
北荒 2020-11-28 00:51

I have an NSString with the value of

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

How can I get everything before the 3rd level?

http         


        
相关标签:
2条回答
  • 2020-11-28 01:08

    Playground provides an interactive way of seeing this in action. I hope you can enjoy doing the same, a fun way to learn NSURL an important topic in iOS.

    0 讨论(0)
  • 2020-11-28 01:10

    This isn't exactly the third level, mind you. An URL is split like that way:

    • the protocol or scheme (here, http)
    • the :// delimiter
    • the username and the password (here there isn't any, but it could be username:password@hostname)
    • the host name (here, digg.com)
    • the port (that would be :80 after the domain name for instance)
    • the path (here, /news/business/24hr)
    • the parameter string (anything that follows a semicolon)
    • the query string (that would be if you had GET parameters like ?foo=bar&baz=frob)
    • the fragment (that would be if you had an anchor in the link, like #foobar).

    A "fully-featured" URL would look like this:

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

    NSURL has a wide range of accessors. You may check them in the documentation for the NSURL class, section Accessing the Parts of the URL. For quick reference:

    • -[NSURL scheme] = http
    • -[NSURL resourceSpecifier] = (everything from // to the end of the 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"] (note that the initial / is part of it)
    • -[NSURL lastPathComponent] = file.html
    • -[NSURL pathExtension] = html
    • -[NSURL parameterString] = params-here
    • -[NSURL query] = foo=bar
    • -[NSURL fragment] = baz

    What you'll want, though, is something like that:

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

    For your example URL, what you seem to want is the protocol, the host and the first path component. (The element at index 0 in the array returned by -[NSString pathComponents] is simply "/", so you'll want the element at index 1. The other slashes are discarded.)

    0 讨论(0)
提交回复
热议问题