как отсортировать товары по цене в приложении покупок? - PullRequest
2 голосов
/ 31 января 2012

Во-первых, я получил некоторые продукты из IAP

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response  
{  
    [productDetailsList addObjectsFromArray: response.products];  
    [productDisplayTableView reloadData];  
}

Как поставить их в удобном виде по цене товара? спасибо.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
{  
    static NSString *GenericTableIdentifier = @"GenericTableIdentifier";  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: GenericTableIdentifier];  
    if (cell == nil) {  
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                       reuseIdentifier:GenericTableIdentifier] autorelease];
    }   

    SKProduct *thisProduct = [productDetailsList objectAtIndex:row];
    NSUInteger row = [indexPath row];

    [button setTitle:localizedMoneyString forState:UIControlStateNormal];

    [cell.contentView addSubview:button];

    return cell; 
}

Ответы [ 5 ]

14 голосов
/ 24 марта 2012
NSArray *products = [response.products sortedArrayUsingComparator:^(id a, id b) {
        NSDecimalNumber *first = [(SKProduct*)a price];
        NSDecimalNumber *second = [(SKProduct*)b price];
        return [first compare:second];
    }];
3 голосов
/ 13 февраля 2016

Swift 2.1.1

public func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
    let unsortedProducts = response.products
    let products = unsortedProducts.sort{($0.price.compare($1.price) == NSComparisonResult.OrderedAscending)}
    for p in products {
        print("Found product: \(p.productIdentifier) \(p.localizedTitle) \(p.price.floatValue)")
    } ...
1 голос
/ 16 июня 2017

Swift 3, без необходимости self переменных.Сработал для меня как брелок по цене от низкой до высокой:

var validProducts = response.products
var productsArray = [SKProduct]()
for i in 0 ..< validProducts.count {
    let product = validProducts[i]
    productsArray.append(product)
}
productsArray.sort{(Double($0.price) < Double($1.price))}
0 голосов
/ 08 ноября 2015

В быстром

 var validProducts = response.products
        for var i = 0; i < validProducts.count; i++
        {
            self.product = validProducts[i] as? SKProduct
            self.productsArray.append(product!)
            println(product!.localizedTitle)
            println(product!.localizedDescription)
            println(product!.price)


        }
        self.productsArray.sort{($0.price < $1.price)}
0 голосов
/ 31 января 2012

То, что вы хотите сделать, это отсортировать NSArray перед тем, как пытаться его прочитать.Существует много вариантов сортировки NSArray, большинство из которых включают создание собственного метода сортировки.Вы делаете что-то вроде:

[productDetailList sortedArrayUsingFunction:intSort context:NULL];

Это будет использовать ваш метод сравнения, который вы укажете.Метод сравнения используется для сравнения двух элементов одновременно и должен возвращать NSOrderedAscending, если первый элемент меньше второго, NSOrderedDescending, если первый элемент больше второго, и NSOrderedSame, если элементы равны.Каждый раз, когда вызывается функция сравнения, ей передается контекст в качестве третьего аргумента.Это позволяет основывать сравнение на каком-то внешнем параметре, например, учитывает ли сортировка символов регистр или регистр, но это не имеет значения в вашем случае.Функция, которую вы должны реализовать, будет выглядеть следующим образом:

NSInteger intSort(id num1, id num2, void *context)

Для получения дополнительной информации о вышеописанном методе взгляните на документацию , в которой приведен пример.

Таким образом, вы можете сортировать массив таким образом или у вас всегда есть выбор сортировки массива каждый раз, когда вы что-то добавляете.Поэтому каждый раз, когда вы добавляете объект, вы выполняете сортировку самостоятельно и обязательно размещаете его в правильном месте, чтобы массив всегда был отсортирован.

В зависимости от того, что вы хотите, я бы сказал, что массив постоянно сортируется наВремя вставки - лучший вариант, поэтому вам не нужно тратить время на построение представления путем сортировки массива.Сделать это так просто: каждый раз, когда вы вводите что-то в массив, вы перебираете массив, пока не найдете объект с ценой, большей той, которую вы хотите ввести, а затем вставляете объект в том месте, гдезапись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...