0

我在下面的函数中接收到一个对象数组,该数组中的每个项目都包含一个值,它是 CGFloat 的类型,我在下面使用这个函数,但在返回行出现错误:“预期标识符”

- (void)setupPieChartWithItems:(NSArray *)items {

    NSArray *sortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        CGFloat first = [(PNPieChartDataItem*)a value];
        CGFloat second = [(PNPieChartDataItem*)b value];
        return [first > second];
    }];
}

错误在哪里?任何想法?

4

3 回答 3

0

删除括号[first > second]以修复编译器错误,并且该块必须返回一个NSComparisonResult

- (void)setupPieChartWithItems:(NSArray *)items {
    NSArray *sortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(PNPieChartDataItem *a, PNPieChartDataItem *b) {
        CGFloat first = [a value];
        CGFloat second = [b value];
        if (first > second)
            return NSOrderedDescending;
        if (first < second)
            return NSOrderedAscending;
        return NSOrderedSame;
    }];
}

就像在这个答案中一样,如何对浮点值的 NSArray 进行排序?.

于 2018-05-11T11:08:23.860 回答
0

问题可能与此中的括号有关, [first > second]; 因为sortedArrayUsingComparator返回 NSComparisonResult 值而不是 bool 值数组是必需的

将您的代码替换为

- (void)setupPieChartWithItems:(NSArray *)items {

    NSArray *sortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        CGFloat first = [(PNPieChartDataItem*)a value];
        CGFloat second = [(PNPieChartDataItem*)b value];
        return [[NSNumber numberWithFloat:first] compare:[NSNumber numberWithFloat:second]];

     }];
}

希望对您有所帮助

于 2018-05-11T09:46:46.867 回答
0

你可以用这个替换你的排序代码:

NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
NSMutableArray *sortedArray = items.mutableCopy;
[sortedArray sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]];

设置YESascending将导致 1.3、2.6、3.1... 而设置NO将导致 3.1、2.6、1.3...</p>

如果您需要任何帮助,请告诉我:)

于 2018-05-11T10:39:03.490 回答