我有switch
语句,可以创建相关的NSSortDescriptor
。对于某些NSSortDescriptors
我使用block
作为自定义comparator
(比较CMTimes
)。以下代码工作正常,但我想添加一些NSSortDescriptors
并比较CMTimes
。由于block
始终相同,因此可以创建variable
来保存block
,因此我无需继续复制和粘贴杂乱的代码。我想它应该是可能的,但我似乎无法让它发挥作用。我非常感谢任何帮助。谢谢!
NSSortDescriptor *sortDescriptor;
switch (mode) {
case 1:
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"startTime" ascending: YES comparator:^(id first, id second){
CMTime time1 = [first CMTimeValue];
CMTime time2 = [second CMTimeValue];
if (CMTIME_COMPARE_INLINE(time1, <, time2))
return NSOrderedAscending;
else if (CMTIME_COMPARE_INLINE(time1, >, time2))
return NSOrderedDescending;
else
return NSOrderedSame;
}];
break;
case 2:
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"startTime" ascending: NO comparator:^(id first, id second){
CMTime time1 = [first CMTimeValue];
CMTime time2 = [second CMTimeValue];
if (CMTIME_COMPARE_INLINE(time1, <, time2))
return NSOrderedAscending;
else if (CMTIME_COMPARE_INLINE(time1, >, time2))
return NSOrderedDescending;
else
return NSOrderedSame;
}];
break;
case 3:
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"info" ascending: YES];
break;
case 4:
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"info" ascending: NO];
break;
default:
break;
}
答案 0 :(得分:9)
您可以创建一个块变量,这样就不必复制和粘贴块代码。
NSComparator comparisonBlock = ^(id first,id second) {
return NSOrderedAscending;
};
[NSSortDescriptor sortDescriptorWithKey: @"startTime" ascending: YES comparator:comparisonBlock];
答案 1 :(得分:4)
你可以按照
的方式做点什么NSComparator myBlock = ^(id first, id second) {
CMTime time1 = [first CMTimeValue];
CMTime time2 = [second CMTimeValue];
if (CMTIME_COMPARE_INLINE(time1, <, time2))
return NSOrderedAscending;
else if (CMTIME_COMPARE_INLINE(time1, >, time2))
return NSOrderedDescending;
else
return NSOrderedSame;
}
这将创建一个变量myBlock,它是一个返回类型为NSComparator的块,并带有两个id类型参数。
然后你应该可以打电话给例如:
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"startTime" ascending: YES comparator:myBlock];
一切都应该很好用。
希望这会有所帮助,请告诉我是否还有其他任何可以帮助的方法:)
答案 2 :(得分:1)
当然,使用@property (nonatomic, copy)
作为属性(不要忘记发布),或者只是在作业之前定义一个块。