Objective-c IOS 从URL中截取所包含的参数,并且以字典的形式返回

2018 年 1 月 8 日 0 条评论 3.16k 次阅读 0 人点赞

ios 从URL中截取所包含的参数,并且以字典的形式返回

/** 
 *  截取URL中的参数 
 * 
 *  @return NSMutableDictionary parameters 
 */  
- (NSMutableDictionary *)getURLParameters:(NSString *)urlStr {  
      
    // 查找参数  
    NSRange range = [urlStr rangeOfString:@"?"];  
    if (range.location == NSNotFound) {  
        return nil;  
    }  
      
    // 以字典形式将参数返回  
    NSMutableDictionary *params = [NSMutableDictionary dictionary];  
      
    // 截取参数  
    NSString *parametersString = [urlStr substringFromIndex:range.location + 1];  
      
    // 判断参数是单个参数还是多个参数  
    if ([parametersString containsString:@"&"]) {  
          
        // 多个参数,分割参数  
        NSArray *urlComponents = [parametersString componentsSeparatedByString:@"&"];  
          
        for (NSString *keyValuePair in urlComponents) {  
            // 生成Key/Value  
            NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];  
            NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];  
            NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding];  
              
            // Key不能为nil  
            if (key == nil || value == nil) {  
                continue;  
            }  
              
            id existValue = [params valueForKey:key];  
              
            if (existValue != nil) {  
                  
                // 已存在的值,生成数组  
                if ([existValue isKindOfClass:[NSArray class]]) {  
                    // 已存在的值生成数组  
                    NSMutableArray *items = [NSMutableArray arrayWithArray:existValue];  
                    [items addObject:value];  
                      
                    [params setValue:items forKey:key];  
                } else {  
                      
                    // 非数组  
                    [params setValue:@[existValue, value] forKey:key];  
                }  
                  
            } else {  
                  
                // 设置值  
                [params setValue:value forKey:key];  
            }  
        }  
    } else {  
        // 单个参数  
          
        // 生成Key/Value  
        NSArray *pairComponents = [parametersString componentsSeparatedByString:@"="];  
          
        // 只有一个参数,没有值  
        if (pairComponents.count == 1) {  
            return nil;  
        }  
          
        // 分隔值  
        NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];  
        NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding];  
          
        // Key不能为nil  
        if (key == nil || value == nil) {  
            return nil;  
        }  
          
        // 设置值  
        [params setValue:value forKey:key];  
    }  
      
    return params;  
}  

雷雷

这个人太懒什么东西都没留下

文章评论(0)

(Spamcheck Enabled)