獲取URL參數

/**
 *  獲取 URL 參數
 *
 *  @param url <#url description#>
 *
 *  @return <#return value description#>
 */
- (NSMutableDictionary *)getURLParameters:(NSString *)url {
    // 查找參數
    NSRange range = [url rangeOfString:@"?"];
    if (range.location == NSNotFound) {
        return nil;
    }

    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    // 截取參數
    NSString *parametersString = [url 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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容