gpt4 book ai didi

ios - 当只有一个字典可用时,如何通过一个或多个字典访问for循环中的局部变量?

转载 作者:行者123 更新时间:2023-11-29 02:35:21 25 4
gpt4 key购买 nike

我有一个 for 循环来遍历字典的字典。除非总共只有一本字典,否则它工作得很好。

这是我的方法的要点:

- (NSArray *)objectsFromJSON:(NSString *)jsonString error:(NSError **)error
{
NSParameterAssert(jsonString != nil);

// create JSON object
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *localError = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&localError];
NSDictionary *dictionaryOfDictionaries = (id)jsonObject;

// if not parsed successfully, error
if(dictionaryOfDictionaries == nil)
{
if(error != NULL)
{
*error = [NSError errorWithDomain:ErrorDomain code:MissingDataError userInfo:nil];
}

return nil;
}

// else create objects out of parsed data
NSMutableArray *objectsArray = [NSMutableArray array];

for(NSDictionary *objectDictionary in dictionaryOfDictionaries)
{
// required properties
Obj *object = [[Obj alloc]
initWithName:objectDictionary[@"name"]
Street:objectDictionary[@"street"]
City:objectDictionary[@"city"]
State:objectDictionary[@"state"]
];

// if error, return
if(object == nil)
{
if(!error)
{
*error = [NSError errorWithDomain:ErrorDomain code:MissingDataError userInfo:nil];
}

return nil;
}

// else add to array of objects created successfully
[objectsArray addObject:object];
}

return [objectsArray copy];
}

如前所述,如果 dictionaryOfDictionaries< 中有不止一个字典,这会很好地工作 - 即所有 object 都成功地从 objectDictionary 中创建出来。但是,如果只有一个字典,objectDictionary 最终会在 for 循环中键入 id(而不是键入 Obj),并尝试访问其值,例如 objectDictionary[@"name"] 会导致错误。

如何最有效地编写此代码以便处理只有一本字典的情况?

最佳答案

问题来了。当你有多个字典时,你实际上会得到一组字典。换句话说,jsonObject 实际上是一个包含每个字典的 NSArray

当只有一本字典时,jsonObject就是那一本字典。

像这样更改您的代码:

id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&localError];
NSArray *arrayOfDictionaries = nil;
if (jsonObject == nil) {
// handle error
} else if ([jsonObject isKindOfClass:[NSArray class]]) {
arrayOfDictionaries = jsonObject;
} else {
arrayOfDictionaries = @[ jsonObject ];
}

然后将 for 循环更改为:

for(NSDictionary *objectDictionary in arrayOfDictionaries)

关于ios - 当只有一个字典可用时,如何通过一个或多个字典访问for循环中的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26432559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com