Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个Objective-C字典代码做什么?_Objective C_Nsarray_Nsdictionary - Fatal编程技术网

这个Objective-C字典代码做什么?

这个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

h

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;      
}
我想我们正在设置Type
IAPProduct*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];