这个Objective-C字典代码做什么?
h m 我对下面的线路有问题:这个Objective-C字典代码做什么?,objective-c,nsarray,nsdictionary,Objective C,Nsarray,Nsdictionary,h m 我对下面的线路有问题: - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSLog(@"Loaded list of products..."); _productsRequest = nil; NSArray * skProducts = response.products; for (SKP
- (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;
}
我想我们正在设置TypeIAPProduct*product=NSMutableDictionary[NSArray.productIdentifier]代码>
我以为数组只有元素(objectAtIndex
)?为什么有一个点(.)和productIdentifier
而且它不是IAPProduct*product=NSMutableDictionary[NSArray.productIdentifier]代码>
skProduct
的类型是skProduct
,而不是NSArray
。对于(SKProduct中的SKProduct*SKProduct)
的快速枚举循环通过skProducts
中的所有元素作为SKProduct
这(在某种程度上)类似于使用带计数器的循环:
IAPProduct * product = _products[skProduct.productIdentifier];
//用于(SKProduct*SKProduct中的SKProduct)
对于(int i=0;i您在理解这条线时遇到困难:
//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;
}
让我们把它分解一下:
IAPProduct * product = _products[skProduct.productIdentifier];
第二行是现代语法,用于:
NSString *key = skProduct.productIdentifier;
IAPProduct * product = _products[key];
这是在字典中查找给定键的值的正常方法。这与IAPProduct*product=[\u products objectForKey:[skProduct productIdentifier]]
谢谢。objectForkey的值是多少?如果它被视为一个字典,那么为什么在这里它被视为一个数组:IAPProduct*product=\u products[invalidProductIdentifier];没有数组。这是现代Objective-C语法。如果\u products
是NSDictionary
,则方括号中的值是字典中的键。如果\u product
是NSArray
,则方括号中的值必须是有效的数组索引。我想我很难理解如何可以我们将一个类的实例指定为objectForKey?请参阅我的答案,以更清楚地了解我到目前为止在评论中描述的内容。谢谢。SKProduct是一个标准的StoreKit类。另一个愚蠢的问题:我们如何将SKProduct的实例指定为数组的元素?谢谢。我们如何将IAProduct的实例指定为objectForKey.Sorry、 我不理解这个问题。objectForKey:
是NSDictionary
类上的一个方法。请后退。您的\u产品
字典(您从未显示它是如何填充或设置的)似乎包含一组IAPProduct
对象,这些对象由表示产品标识符的NSString
对象键入。调用\u products[someIdentifier]
您将获得具有给定标识符的IAPProduct
。我正在努力解决IAPProduct是一个类的问题,为什么要给它分配一个NSString。通常,NSString的分配方式是:classInstance.someVariable=aString;字符串没有分配给产品
。字典中的IAPProduct
正在运行g分配给产品
。请阅读NSDictionary
上的文档。您了解您自己的\u products
词典中的内容吗?这似乎是这里最大的问题。
NSString *key = skProduct.productIdentifier;
IAPProduct * product = _products[key];
IAProduct * product = [_products objectForKey:key];