近期項目中的一個URL拼接的地方出現(xiàn)了問題,跟接口方約定好規(guī)則--
他提供的原始URL是帶“?”的,我們直接拼接參數(shù)就好了,
但是他們更新接口后,提供的原始URL不帶”?“了,導致線上出現(xiàn)問題。
在新版本解決這個問題很簡單,加上“?”就可以了,可是老版本怎么辦? 或者以后他們的規(guī)則又變了怎么辦?
最終考慮做一個URL拼接的封裝,實現(xiàn)各種情況下拼接參數(shù)不會出問題:
封裝法法如下:
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) {//找到了
//如果?是最后一個直接拼接參數(shù)
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