You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Objective-C中从对象数组根据特定值获取对应对象

在Objective-C中从对象数组根据特定值获取对应对象的实现方法

嘿,你在Swift里用first(where:)的写法确实挺简洁的,在Objective-C里也有对应的实现方式,根据你项目支持的iOS版本,有几种不同的方案可以选:

1. iOS 9及以上版本(推荐)

从iOS 9开始,NSArray新增了firstObjectPassingTest:方法,和Swift的first(where:)逻辑几乎完全一致,用法非常直观:

// 替换成你实际的数组和目标id
NSArray *layers = self.layers;
NSString *targetId = @"要匹配的ID"; // 如果是数值类型就用NSInteger等

YourLayerClass *targetLayer = [layers firstObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    YourLayerClass *layer = (YourLayerClass *)obj;
    // 根据你的id类型调整判断方式:字符串用isEqualToString:,数值用==
    return [layer.id isEqualToString:targetId];
}];

if (targetLayer) {
    // 找到匹配对象,执行后续操作
}

这个方法会在找到第一个符合条件的对象后立刻停止遍历,效率和Swift的写法一样高,block里的*stop = YES还能手动触发终止(不过默认找到第一个就停了,一般不用额外设置)。

2. 兼容iOS 8及更早版本

如果需要支持更低版本的系统,就只能手动遍历数组了,逻辑也很简单:

NSArray *layers = self.layers;
NSString *targetId = @"要匹配的ID";
YourLayerClass *targetLayer = nil;

for (YourLayerClass *layer in layers) {
    if ([layer.id isEqualToString:targetId]) {
        targetLayer = layer;
        break; // 找到第一个匹配项就停止遍历,提升效率
    }
}

if (targetLayer) {
    // 处理找到的对象
}

这种写法兼容性拉满,就是代码稍微长一点,但逻辑清晰易懂。

关键注意事项

  • 记得把YourLayerClass替换成你数组中实际的对象类名
  • 字符串类型的id一定要用isEqualToString:判断,别直接用==(==比较的是内存地址,不是字符串内容);如果是数值类型(比如NSInteger),直接用==就可以
  • 如果数组可能为空,记得先做非空判断,避免崩溃

内容的提问来源于stack exchange,提问作者Parv Bhasker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:42:25