[iOS]---url拼接参数封装方法

2018-06-08  本文已影响0人  半缘魔君

近期项目中的一个URL拼接的地方出现了问题,跟接口方约定好规则--

他提供的原始URL是带“?”的,我们直接拼接参数就好了,

但是他们更新接口后,提供的原始URL不带”?“了,导致线上出现问题。

在新版本解决这个问题很简单,加上“?”就可以了,可是老版本怎么办? 或者以后他们的规则又变了怎么办?

最终考虑做一个URL拼接的封装,实现各种情况下拼接参数不会出问题:
封装法法如下:

NSString+Extention.h

  #import <Foundation/Foundation.h>

@interface NSString (Extention)
-(NSString *)urlAddCompnentForValue:(NSString *)value key:  (NSString *)key;
@end

NSString+Extention.m

#import "NSString+Extention.h"

@implementation NSString (Extention)
-(NSString *)urlAddCompnentForValue:(NSString *)value key:(NSString *)key{
    
    NSMutableString *string = [[NSMutableString alloc]initWithString:self];
    @try {
        NSRange range = [string rangeOfString:@"?"];
        if (range.location != NSNotFound) {//找到了
            //如果?是最后一个直接拼接参数
            if (string.length == (range.location + range.length)) {
                NSLog(@"最后一个是?");
                string = (NSMutableString *)[string stringByAppendingString:[NSString stringWithFormat:@"%@=%@",key,value]];
            }else{//如果不是最后一个需要加&
                if([string hasSuffix:@"&"]){//如果最后一个是&,直接拼接
                    string = (NSMutableString *)[string stringByAppendingString:[NSString stringWithFormat:@"%@=%@",key,value]];
                }else{//如果最后不是&,需要加&后拼接
                    string = (NSMutableString *)[string stringByAppendingString:[NSString stringWithFormat:@"&%@=%@",key,value]];
                }
            }
        }else{//没找到
            if([string hasSuffix:@"&"]){//如果最后一个是&,去掉&后拼接
                string = (NSMutableString *)[string substringToIndex:string.length-1];
            }
            string = (NSMutableString *)[string stringByAppendingString:[NSString stringWithFormat:@"?%@=%@",key,value]];
        }
    } @catch (NSException *exception) {
        
    } @finally {
        
    }
    
    
    return string.copy;
}
 @end
上一篇下一篇

猜你喜欢

热点阅读