编写Category方法以扩展NSDictionary的方式存在歧义

时间:2014-05-15 06:26:35

标签: ios objective-c objective-c-category

您好我正在阅读Ray Wenderlich博客的AFNetworking教程,在本教程项目中,他编写了一些类别来扩展NSDictionary,其中一个类别如下所示:

#import "NSDictionary+weather_package.h"

@implementation NSDictionary (weather_package)

- (NSDictionary *)currentCondition
{
    NSDictionary *dict = self[@"data"];
    NSArray *ar = dict[@"current_condition"];
    return ar[0];
}

- (NSDictionary *)request
{
    NSDictionary *dict = self[@"data"];
    NSArray *ar = dict[@"request"];
    return ar[0];
}

- (NSArray *)upcomingWeather
{
    NSDictionary *dict = self[@"data"];
    return dict[@"weather"];
}

@end

我知道Objective-C中使用的类别。但实际上他写的代码对我来说似乎非常高,而且令人困惑。顺便说一下,我在谈论这些问题:

NSDictionary *dict = self[@"data"];
NSArray *ar = dict[@"current_condition"];

我真的不明白自我[@“数据”] dict [@“current_condition”] 是如何工作的。

那么有人可以帮我理解这里发生了什么吗?这对我很有帮助。

PS: BTW这就是Ray在字典上调用他的类别方法的方式:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"WeatherCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    NSDictionary *daysWeather = nil;

    switch (indexPath.section) {
        case 0: {
            daysWeather = [self.weather currentCondition];
            break;
        }
        default:
            break;
    }

提前致谢。

1 个答案:

答案 0 :(得分:0)

这一行:

NSDictionary *dict = self[@"data"];

只是一个很好的快捷方式:

NSDictionary *dict = [self objectForKey:@"data"]; 

"数据"是键,值是NSDictionary对象。

与另一行相同,只是返回的值是一个数组。