是否可以在NSMutableDictionary上使用快速枚举?

时间:2014-09-21 20:05:03

标签: objective-c macos fast-enumeration

我有以下方法(它是ShoppingCart的实例方法):

- (void) showShoppingCartProducts
 {
   for (Product *eachProduct in products)
    {
      [eachProduct logName]
    }
}

我有另一种方法(它是ShoppingCart的实例方法):

- (void) addProduct: (Product *) newProduct {
    [products objectForKey: newProduct.name];
}

应该遍历(Product *) eachProduct中的每个(NSMutableDictionary *) products

logName执行以下操作(它是Product的实例方法):

- (void) logName
{
  NSLog(@"%@", self.name);
}

这是我的main()功能

int main(int argc, const char * argv[]) {

    ShoppingCart* myShoppingCart = [[ShoppingCart alloc] init];

    Product* myProduct = [[Product alloc] init];

    myProduct.name = @"My Latest Product";

    [myShoppingCart addProduct: myProduct];

    [myShoppingCart showShoppingCartProducts];

    return 0;
}

运行程序后,它返回0,但不显示任何内容。

是否可以在NSMutableDictionary上使用快速枚举?

1 个答案:

答案 0 :(得分:2)

此:

  

注意:[myShoppingCart addProduct: myProduct]只是将(Product) myProduct添加到(ShoppingCart *)myShoppingCart

中的NSMutableDictionary 产品中

没有充分的解释。没有“只是将对象添加到NSMutableDictionary”这样的事情。您为字典中的键设置了一个值。哪个是myProduct,价值还是关键?如果是价值,关键是什么?如果它是关键,那么价值是多少?

回答基本问题:是的,您可以快速枚举字典。枚举 。如果您想要每个键的值,则必须使用-objectForKey:或下标语法查找它。

如果您认为您正在向字典(或任何其他集合)添加对象,但字典(集合)似乎是空的,那可能是因为您正在处理nil指针而不是一个实际的集合。你忽略了创建集合并存储它的强引用。


您已编辑问题以显示此方法:

- (void) addProduct: (Product *) newProduct {
    [products objectForKey: newProduct.name];
}

该方法不会将产品添加到字典中。 -objectForKey: 查找一个对象,该对象可能已经通过其键存在于字典中。它不会修改字典。你可能打算这样做:

- (void) addProduct: (Product *) newProduct {
    [products setObject:newProduct forKey:newProduct.name];
}

鉴于您成功将Product个实例添加到字典中,nameNSString*,您的枚举应如下所示:

for (NSString* name in products)
{
    Product* product = [products objectForKey:name];
    [product logName]
}