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

从Obj-C转Swift:数组中查找modelFoo类型对象并替换的最简方法

Swift 替换数组中指定类型对象的最简实现

刚从Objective-C转Swift确实会有点手足无措,基础操作都得重新适应对吧?你的这个需求其实用Swift的高阶函数就能非常简洁地实现,分两种常见情况给你说说:

替换所有ModelFoo类型的对象

如果需要把数组里所有符合ModelFoo类型的对象都替换成newModel,用map函数一步就能搞定——它会遍历数组的每个元素,根据条件生成新元素,最终返回替换后的完整数组:

// 假设你的数组是 let models: [Any] = ...(或者具体的父类类型,比如BaseModel)
let updatedModels = models.map { $0 is ModelFoo ? newModel : $0 }

这里用了Swift的尾随闭包简化写法,$0代表当前遍历到的元素,判断它是否属于ModelFoo类型,是的话替换为newModel,否则保留原元素。

只替换第一个找到的ModelFoo对象

如果只需要替换数组中第一个符合条件的ModelFoo对象,可以先定位到它的索引,再修改对应位置的元素:

// 若原数组是let声明的不可变数组,先转为可变数组
var mutableModels = models
// 找到第一个ModelFoo类型元素的索引
if let targetIndex = mutableModels.firstIndex(where: { $0 is ModelFoo }) {
    mutableModels[targetIndex] = newModel
}

firstIndex(where:)方法会返回第一个满足条件的元素索引,只要索引存在,就直接修改可变数组对应位置的值即可。

小提示

如果你的数组元素是明确的父类类型(比如所有元素都是BaseModel的子类),建议把Any换成对应的父类类型,这样类型判断会更安全,也能避免一些潜在的类型问题。

内容的提问来源于stack exchange,提问作者chris P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:03:01