如何从数组中获取特定值的对象

时间:2018-05-23 10:13:41

标签: ios objective-c arrays

在swift中,我使用此代码获取特定值的特定对象

if let layer = self.layers.first(where: {$0.id == id}) { }

我想在objective-c中使用它。我应该如何从特定值的对象数组中获取对象

3 个答案:

答案 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
}