这个Objective-C字典代码有什么作用?

时间:2013-05-16 03:55:25

标签: objective-c nsarray nsdictionary

·H

@property (nonatomic, strong) NSMutableDictionary * products;  //not synthesized in .m

的.m

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSLog(@"Loaded list of products...");
    _productsRequest = nil;

    NSArray * skProducts = response.products;
    for (SKProduct * skProduct in skProducts)
    {
        IAPProduct * product = _products[skProduct.productIdentifier];
        product.skProduct = skProduct;
        product.availableForPurchase = YES;
    }

    for (NSString * invalidProductIdentifier in response.invalidProductIdentifiers)
    {
        IAPProduct * product = _products[invalidProductIdentifier];
        product.availableForPurchase = NO;
        NSLog(@"Invalid product identifier, removing: %@", invalidProductIdentifier);
    }

    NSMutableArray * availableProducts = [NSMutableArray array];
    for (IAPProduct * product in _products.allValues) {
        if (product.availableForPurchase) {
            [availableProducts addObject:product];
        }
    }

    _completionHandler(YES, availableProducts);
    _completionHandler = nil;      
}

我遇到以下问题:

IAPProduct * product = _products[skProduct.productIdentifier];

我想我们正在设置类型IAPProduct *product= NSMutableDictionary[NSArray.productIdentifier];

我认为Array只有元素(objectAtIndex)?为什么有点(。)和productIdentifier?

另外

2 个答案:

答案 0 :(得分:1)

不是IAPProduct *product= NSMutableDictionary[NSArray.productIdentifier];

skProduct的类型为SKProduct,而不是NSArray。快速枚举for (SKProduct * skProduct in skProducts)循环遍历skProductsSKProduct的所有元素。

它(在某种程度上)就像使用带有计数器的循环一样:

//for (SKProduct * skProduct in skProducts)
for (int i=0; i<skProducts.count; i++)
{
    SKProduct *skProduct = skProduct[i];
    IAPProduct * product = _products[skProduct.productIdentifier];
    product.skProduct = skProduct;
    product.availableForPurchase = YES;
}

答案 1 :(得分:1)

您无法理解这一行:

IAPProduct * product = _products[skProduct.productIdentifier];

让我们分解:

NSString *key = skProduct.productIdentifier;
IAPProduct * product = _products[key];

第二行是现代语法:

IAProduct * product = [_products objectForKey:key];

这是在给定键的字典中查找值的常规方法。