在swift中,我使用此代码获取特定值的特定对象
if let layer = self.layers.first(where: {$0.id == id}) { }
我想在objective-c中使用它。我应该如何从特定值的对象数组中获取对象
答案 0 :(得分:2)
您可以使用NSPredicate
中的Objective-C
来过滤数组。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id == %@", id];
id layer = [[self.layers filteredArrayUsingPredicate:predicate] firstObject]
答案 1 :(得分:1)
predicateWithFormat解决方案很简短,但不像Swift那样类型安全。
为了使其更加类型安全,您可以使用indexOfObjectPassingTest。
假设你有:
@interface MyLayer
@property int layerID;
@end
NSArray<MyLayer *> *layers = @[...];
int layerIDToFind = 123;
你可以写:
NSUInteger index = [layers indexOfObjectPassingTest:^BOOL(MyLayer *layer, NSUInteger idx, BOOL *stop) {
return layer.layerID == layerIDToFind;
}];
if (index != NSNotFound) {
MyLayer *layer = layers[index];
// ... act on the layer ...
}
答案 2 :(得分:-1)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id == %@", id];
NSArray *result = [self.layers filteredArrayUsingPredicate:predicate];
if result.count > 0
{
id layer = [result firstObject].id
}