将相同名称的NSURLComponents queryItems作为数组分组到NSDictionary中



由于我目前没有objective-C知识,用我所知道的其他语言来说,这将是一项简单的任务。

对于这样的查询字符串:

name1=value1&name2=value2&name1=value3

我最终需要一个形状为的NSDictionary

@{
@"name1": @{
someField: @[
@"value1",
@"value3",
]
anotherField: @YES,
},
@"name2": @{
someField: @[
@"value2",
]
anotherField: @YES,
}
}

在javascript中,我可以通过以下方式解决此问题:

queryItems.reduce((result, item) => {
resultItem = result[item.name] || {
someField: [],
anotherField: true,
}
resultItem.someField.push(item.value)
return {
...result,
[item.name]: resultItem,
}
}, {})

我发现了这个如何在Swift中将url.query转换为字典?但我在这个项目中一直使用Objective-C。

检查下面的功能。我希望我能理解你的意思。

NSDictionary* queryItemsToDictionary(NSString* items) {
NSURLComponents* components = [[NSURLComponents alloc] initWithString:[@"?" stringByAppendingString:items]];
NSMutableDictionary* result = [NSMutableDictionary new];
for (NSURLQueryItem* item in components.queryItems) {
NSDictionary* valueForItem = [result objectForKey:item.name];
NSArray* someFieldValues = [valueForItem objectForKey:@"someField"];
if (someFieldValues == nil) {
someFieldValues = @[];
}
[result setObject:@{
@"someField": [someFieldValues arrayByAddingObject:item.value],
@"anotherField": @YES
} forKey:item.name];
}
return result;
}

这就是你可以尝试的方法:

NSDictionary* dictionary = queryItemsToDictionary(@"name1=value1&name2=value2&name1=value3");
NSLog(@"%@", dictionary);

最新更新