将 URL link 解析成段
parsing a URL link into segments
http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3
如何获得此 url 部分 fksmf84-8493-45u3
? -- 这部分在 运行 时间不断变化。
这是我目前尝试过的方法。
NSString *url = @"http://180.160.1.140/webapp/camera?id=";
NSArray *parts = [url componentsSeparatedByString:@"="];
NSString *personID = [parts lastObject];
NSLog(@"My ID: %@", personID);
要解析所有键值对并将它们作为字典获取,您可以使用 -parseQueryString:
方法。
您可以像这样解析您的查询字符串...
{
//...
NSString * urlQuery = [url query];
NSDictionary *dict = [self parseQueryString:urlQuery];
NSString * valueForID = dict["id"];
//...
}
// Waring : Its just a prototype, at production this might need safety checks.
- (NSDictionary *)parseQueryString:(NSString *)query
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSArray *pairs = [query componentsSeparatedByString:@"&"];
for (NSString *pair in pairs)
{
NSArray *elements = [pair componentsSeparatedByString:@"="];
NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[dict addObject:val forKey:key];
}
return dict;
}
Update :如果目标 iOS 版本高于 7,请查看 Richmond Watkins 的回答。出于相同目的添加了新的 api,检查 NSURLQueryItem
参见:
NSString *url = @"http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3"; // you forgot to add the id in your test case
NSArray *parts = [url componentsSeparatedByString:@"="];
NSString *personID = [parts lastObject];
NSLog(@"My ID: %@", personID);
输出:我的ID:fksmf84-8493-45u3
编辑:
要存储数据:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:personID forKey:@"personID"];
读取数据:
NSString *personID = [defaults objectForKey:@"personID"];
用这个方法可以很方便的得到最后一个运行的值。希望这会对你有所帮助:) .
具有 URL 个组件:
对象:
NSString *urlString = "http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3";
NSURLComponents *components = [NSURLComponents componentsWithString:urlString];
NSArray *queryItems = components.queryItems;
for (NSURLQueryItem *queryItem in queryItems) {
if ([queryItem.name isEqualToString:@"id"]) {
NSLog(@"%@", queryItem.value);
break;
}
}
Swift:
let urlComponents = NSURLComponents(string: "http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3")
let queryItems = urlComponents?.queryItems
if let id = queryItems?.filter({[=11=].name == "id"}).first?.value {
print(id)
}
Swift 3(基本相同-NS):
let urlComponents = URLComponents(string: "http://180.160.1.140/webapp/camera?
id=fksmf84-8493-45u3")
let queryItems = urlComponents?.queryItems
if let id = queryItems?.filter({[=12=].name == "id"}).first?.value {
print(id)
}
http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3
如何获得此 url 部分 fksmf84-8493-45u3
? -- 这部分在 运行 时间不断变化。
这是我目前尝试过的方法。
NSString *url = @"http://180.160.1.140/webapp/camera?id=";
NSArray *parts = [url componentsSeparatedByString:@"="];
NSString *personID = [parts lastObject];
NSLog(@"My ID: %@", personID);
要解析所有键值对并将它们作为字典获取,您可以使用 -parseQueryString:
方法。
您可以像这样解析您的查询字符串...
{
//...
NSString * urlQuery = [url query];
NSDictionary *dict = [self parseQueryString:urlQuery];
NSString * valueForID = dict["id"];
//...
}
// Waring : Its just a prototype, at production this might need safety checks.
- (NSDictionary *)parseQueryString:(NSString *)query
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSArray *pairs = [query componentsSeparatedByString:@"&"];
for (NSString *pair in pairs)
{
NSArray *elements = [pair componentsSeparatedByString:@"="];
NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[dict addObject:val forKey:key];
}
return dict;
}
Update :如果目标 iOS 版本高于 7,请查看 Richmond Watkins 的回答。出于相同目的添加了新的 api,检查 NSURLQueryItem
参见:
NSString *url = @"http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3"; // you forgot to add the id in your test case
NSArray *parts = [url componentsSeparatedByString:@"="];
NSString *personID = [parts lastObject];
NSLog(@"My ID: %@", personID);
输出:我的ID:fksmf84-8493-45u3
编辑:
要存储数据:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:personID forKey:@"personID"];
读取数据:
NSString *personID = [defaults objectForKey:@"personID"];
用这个方法可以很方便的得到最后一个运行的值。希望这会对你有所帮助:) .
具有 URL 个组件:
对象:
NSString *urlString = "http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3";
NSURLComponents *components = [NSURLComponents componentsWithString:urlString];
NSArray *queryItems = components.queryItems;
for (NSURLQueryItem *queryItem in queryItems) {
if ([queryItem.name isEqualToString:@"id"]) {
NSLog(@"%@", queryItem.value);
break;
}
}
Swift:
let urlComponents = NSURLComponents(string: "http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3")
let queryItems = urlComponents?.queryItems
if let id = queryItems?.filter({[=11=].name == "id"}).first?.value {
print(id)
}
Swift 3(基本相同-NS):
let urlComponents = URLComponents(string: "http://180.160.1.140/webapp/camera?
id=fksmf84-8493-45u3")
let queryItems = urlComponents?.queryItems
if let id = queryItems?.filter({[=12=].name == "id"}).first?.value {
print(id)
}