转换此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的视图放在第一位(因此数组中的第一项将是屏幕右侧的视图)。但是我没有得到预期的结果。
答案 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)];
}];