思路: 对字典中的key排序,通过key取value。
@interface NSDictionary (JJ)
/**
* 把请求字典的key排序 拼接
*
* NSDictionary *dict = @{@"name":@"cjq",@"Age":@"25",@"date":@"2016-4-11",@"Birthday":@"3.29"};
*
* @return 一个get请求的参数(urlString---- Age=25&Birthday=3.29&date=2016-4-11&name=cjq)
*/
- (NSString*)urlParameterSortFromKey;
@end
#import "NSDictionary+JJ.h"
@implementation NSDictionary (JJ)
/**
* 把请求字典的key排序 拼接
*
* NSDictionary *dict = @{@"name":@"cjq",@"Age":@"25",@"date":@"2016-4-11",@"Birthday":@"3.29"};
*
* @return 一个get请求的参数 (urlString---- Age=25&Birthday=3.29&date=2016-4-11&name=cjq)
*/
- (NSString*)urlParameterSortFromKey
{
__weak NSDictionary *weakSelf = self;
// 获取字典中keys
NSMutableArray *keys = [NSMutableArray arrayWithArray:self.allKeys];
// 对key 进行排序
[keys sortUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return [obj1 compare:obj2];
}];
// 利用排序key 获得value
__block NSMutableString *urlString = [[NSMutableString alloc] init];
__block NSString *sep = @"&";
__block NSString *equal = @"=";
/**
* NSEnumerationConcurrent 各个Block是同时开始执行的,这样枚举的完成顺序是不确定的。
* NSEnumerationReverse 以反序方式枚举。
*/
[keys enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj) {
if (urlString.length == 0) {
[urlString appendString:obj];
}
else{
[urlString appendString:sep];
[urlString appendString:obj];
}
[urlString appendString:equal];
[urlString appendString:weakSelf[obj]];
}
}];
return urlString;
}
@end