hpi*_*que 25 url objective-c nsurl nsstring
What's the best way to get an url minus its query string in Objective-C? An example:
Input:
http://www.example.com/folder/page.htm?param1=value1¶m2=value2
Run Code Online (Sandbox Code Playgroud)
Output:
http://www.example.com/folder/page.htm
Run Code Online (Sandbox Code Playgroud)
Is there a NSURL method to do this that I'm missing?
And*_*ree 40
从iOS 8/OS X 10.9开始,使用NSURLComponents可以更轻松地完成此操作.
NSURL *url = [NSURL URLWithString:@"http://hostname.com/path?key=value"];
NSURLComponents *urlComponents = [[NSURLComponents alloc] initWithURL:url resolvingAgainstBaseURL:NO];
urlComponents.query = nil; // Strip out query parameters.
NSLog(@"Result: %@", urlComponents.string); // Should print http://hostname.com/path
Run Code Online (Sandbox Code Playgroud)
Sim*_*ker 37
我看不到NSURL方法.您可以尝试以下方法:
NSURL *newURL = [[NSURL alloc] initWithScheme:[url scheme]
host:[url host]
path:[url path]];
Run Code Online (Sandbox Code Playgroud)
测试看起来不错:
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool *arp = [[NSAutoreleasePool alloc] init];
NSURL *url = [NSURL URLWithString:@"http://www.abc.com/foo/bar.cgi?a=1&b=2"];
NSURL *newURL = [[[NSURL alloc] initWithScheme:[url scheme]
host:[url host]
path:[url path]] autorelease];
NSLog(@"\n%@ --> %@", url, newURL);
[arp release];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行它会产生:
$ gcc -lobjc -framework Foundation -std=c99 test.m ; ./a.out
2010-11-25 09:20:32.189 a.out[36068:903]
http://www.abc.com/foo/bar.cgi?a=1&b=2 --> http://www.abc.com/foo/bar.cgi
Run Code Online (Sandbox Code Playgroud)
BLC*_*BLC 14
这是Andree的答案的Swift版本,有一些额外的味道 -
extension NSURL {
func absoluteStringByTrimmingQuery() -> String? {
if var urlcomponents = NSURLComponents(URL: self, resolvingAgainstBaseURL: false) {
urlcomponents.query = nil
return urlcomponents.string
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样称呼它 -
let urlMinusQueryString = url.absoluteStringByTrimmingQuery()
Run Code Online (Sandbox Code Playgroud)
迅捷版
extension URL {
func absoluteStringByTrimmingQuery() -> String? {
if var urlcomponents = URLComponents(url: self, resolvingAgainstBaseURL: false) {
urlcomponents.query = nil
return urlcomponents.string
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
14675 次 |
| 最近记录: |