如何在NSObject数组中匹配指定id时更新对应name属性值?
没问题,我来一步步教你实现这个需求~
解决思路与实现步骤
首先,先确认你的NSObject子类的结构,假设它叫MyItem,我们先把它的定义补全(如果还没写的话):
class MyItem: NSObject { let id: Int // id一般作为标识不修改,用let定义 var name: String // 需要修改的属性用var定义 init(id: Int, name: String) { self.id = id self.name = name super.init() } }
接下来,在MyViewController里,你可以通过以下几种方式实现需求:
方法一:直观的for-in循环遍历(适合新手理解)
这种方式最直接,遍历数组里的每一个对象,判断id是否等于目标值(这里是3),如果是就更新name:
// 假设你已经有了myItem数组实例 let targetId = 3 let newName = "Ken" for item in myItem { if item.id == targetId { item.name = newName // 如果只需要修改第一个符合条件的对象,这里可以加break终止循环 // break } }
方法二:使用Swift高阶函数(更简洁)
如果只需要修改第一个id等于3的对象,用first(where:)快速定位:
if let targetItem = myItem.first(where: { $0.id == 3 }) { targetItem.name = "Ken" }
如果数组里可能有多个id等于3的对象,需要全部修改的话,用filter配合forEach:
myItem.filter { $0.id == 3 }.forEach { $0.name = "Ken" }
注意事项
- 确保
MyItem里的name属性是var(可变的),如果是let的话是无法修改的; - 即使你的数组是不可变数组(
let myItem: [MyItem] = [...]),依然可以修改数组内对象的属性——因为数组存储的是对象的引用,我们修改的是引用指向的对象内容,不是数组本身; - 如果你用的是Objective-C,写法类似:用
for (MyItem *item in myItem)遍历,判断item.id == 3后执行item.name = @"Ken"即可。
内容的提问来源于stack exchange,提问作者ken
相关产品推荐
相关产品推荐

