近期项目中的一个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