将快速排序的方法转换为Objective-C

时间:2019-05-24 12:48:02

标签: objective-c swift sorting

转换此Objective-C排序方法的最佳方法是什么?

let visibleViews = self.scrollView.visibleViews().sorted(by: {$0.frame.origin.x > $1.frame.origin.x} ) 

我转换为:

[visibleViews sortUsingComparator:^NSComparisonResult(UIView *obj1, UIView *obj2) { return obj1.frame.origin.x > obj2.frame.origin.x; }];

我想对值进行排序,以将具有较大xOrigin的视图放在第一位(因此数组中的第一项将是屏幕右侧的视图)。但是我没有得到预期的结果。

1 个答案:

答案 0 :(得分:1)

sortUsingComparator块的返回类型为NSComparisonResult。但是您的实现返回的是BOOL类型。

一种解决方案是使用:

[visibleViews sortUsingComparator:^NSComparisonResult(UIView *obj1, UIView *obj2) {
    return [@(obj1.frame.origin.x) compare:@(obj2.frame.origin.x)];
}];

请注意,完整的翻译将是:

NSArry *visibleViews = [[self.scrollView visibleViews] sortedArrayUsingComparator:^NSComparisonResult(UIView *obj1, UIView *obj2) {
    return [@(obj1.frame.origin.x) compare:@(obj2.frame.origin.x)];
}];