You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按CGFloat值对对象数组升序排序时返回行报错“Expected identifier”

问题分析与解决:排序Comparator中的"Expected identifier"错误

嘿,我来帮你排查这个错误!你遇到的问题出在return语句那一行,具体有两个关键问题:

  1. 语法错误:你写的[first > second]完全不符合Objective-C的语法规则。方括号[]在OC里是用来给对象发送消息(也就是调用方法)的,但这里>是C语言的比较运算符,直接写first > second会得到一个BOOL值,你把它套在方括号里,编译器会误以为你要调用某个方法,自然会报错"Expected identifier"。

  2. 返回值类型不匹配:sortedArrayUsingComparator要求传入的block必须返回NSComparisonResult类型的枚举值(也就是NSOrderedAscending、NSOrderedSame、NSOrderedDescending这三个),而你试图返回一个布尔值(或者错误的表达式),类型完全不对。

修正后的代码

这里给你两种写法,你可以根据需求选择:

写法一:清晰的条件判断(推荐,可读性高)

- (void)setupPieChartWithItems:(NSArray *)items {
    NSArray *sortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        CGFloat first = [(PNPieChartDataItem*)a value];
        CGFloat second = [(PNPieChartDataItem*)b value];
        
        if (first > second) {
            // 降序:大的value排在前面
            return NSOrderedDescending;
        } else if (first < second) {
            return NSOrderedAscending;
        } else {
            return NSOrderedSame;
        }
    }];
    // 这里可以继续处理排序后的sortedArray
}

写法二:简洁的三目运算符

如果喜欢更紧凑的代码,也可以这么写:

- (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) ? NSOrderedDescending : ((first < second) ? NSOrderedAscending : NSOrderedSame);
    }];
}

小提示

如果你想要升序排列(小的value排在前面),只需要把NSOrderedDescending和NSOrderedAscending的位置互换就行啦!

内容的提问来源于stack exchange,提问作者user7477041

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:13:58