·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?
另外
答案 0 :(得分:1)
不是IAPProduct *product= NSMutableDictionary[NSArray.productIdentifier];
skProduct
的类型为SKProduct
,而不是NSArray
。快速枚举for (SKProduct * skProduct in skProducts)
循环遍历skProducts
中SKProduct
的所有元素。
它(在某种程度上)就像使用带有计数器的循环一样:
//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];
这是在给定键的字典中查找值的常规方法。