例子:https://xxxxxx/?team_id=5d5e077fce6d2a62177da413&account_id=5d665417ce6d2a4c759ab835
思考:现在怎么样从这串链接里获取 team_id 和 account_id 这两个参数和值呢?
第一步:先通过 ? 号 把参数和基础连接分开成一个数组: NSArray *arr = [paramURL componentsSeparatedByString:@“?”]; 结果: po arr [ "https://boss-api-dev.aoaosong.com:9040/app-qrcode/", "team_id=5d5e077fce6d2a62177da413&account_id=5d665417ce6d2a4c759ab835" ]
第二步:判断分割的数组是否大于等于二,确保里面有参数。 然后从 arr[1] 里面有参数的字符串里 去通过 & 分割字符,把参数放到一个数组里。 if (arr.count>=2) { // 截取参数数组 NSArray *params = [arr[1] componentsSeparatedByString:@“&”]; 结果: po params [ "team_id=5d5e077fce6d2a62177da413", "account_id=5d665417ce6d2a4c759ab835" ]
第三步:再再通过遍历params,把遇到 = 号的 分割成一个数组,结果: po param [ "team_id", "5d5e077fce6d2a62177da413" ]
第四步:设置索引0为 key , 1 为 value,存放在可变字典里返回:
if (arr.count>=2) { // 截取参数数组 NSArray *params = [arr[1] componentsSeparatedByString:@"&"]; // 用于存放参数的键和值 NSArray *param = [NSArray array]; for (int i = 0; i<params.count; i++) { param = [params[i] componentsSeparatedByString:@"="]; if (param.count >= 2) { [paramInfo setValue:param[1] forKey:param[0]]; } } } // 现在paramInfo字典里存放的都是参数的键值对了 return paramInfo;
第五(扩展):根据实际需求考虑一些特殊情况,比如包含汉字要先进行编解码。参数里包含URL的时候要处理:
if ([paramURL containsString:@"%"]) {
paramURL = [paramURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
NSMutableDictionary * paramInfo = [NSMutableDictionary dictionary];
// ITBoy://test?title=test&username=lisi&url=http://www.baidu.com?userid=110
// 参数如果包含url
if ([paramURL containsString:@"url="]) {
// 获取要截取的字符串位置
NSRange range = [paramURL rangeOfString:@"url="];
// 截取参数里url部分
NSString * paramsStr= [paramURL substringFromIndex:range.location];
NSArray * param = [paramsStr componentsSeparatedByString:@"="];
if (param.count>=2) {
[paramInfo setValue:param[1] forKey:param[0]];
}
// ITBoy://test?title=test&username=lisi
paramURL = [paramURL substringToIndex:range.location-1];
}