我有以下方法(它是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上使用快速枚举?
答案 0 :(得分:2)
此:
注意:
中的NSMutableDictionary 产品中[myShoppingCart addProduct: myProduct]
只是将(Product) myProduct添加到(ShoppingCart *)myShoppingCart
没有充分的解释。没有“只是将对象添加到NSMutableDictionary
”这样的事情。您为字典中的键设置了一个值。哪个是myProduct
,价值还是关键?如果是价值,关键是什么?如果它是关键,那么价值是多少?
回答基本问题:是的,您可以快速枚举字典。枚举 键 。如果您想要每个键的值,则必须使用-objectForKey:
或下标语法查找它。
如果您认为您正在向字典(或任何其他集合)添加对象,但字典(集合)似乎是空的,那可能是因为您正在处理nil
指针而不是一个实际的集合。你忽略了创建集合并存储它的强引用。
您已编辑问题以显示此方法:
- (void) addProduct: (Product *) newProduct {
[products objectForKey: newProduct.name];
}
该方法不会将产品添加到字典中。 -objectForKey:
查找一个对象,该对象可能已经通过其键存在于字典中。它不会修改字典。你可能打算这样做:
- (void) addProduct: (Product *) newProduct {
[products setObject:newProduct forKey:newProduct.name];
}
鉴于您成功将Product
个实例添加到字典中,name
是NSString*
,您的枚举应如下所示:
for (NSString* name in products)
{
Product* product = [products objectForKey:name];
[product logName]
}