Swift数组调用firstIndex用===判断相同id实例返回nil的原因
问题原因
你在匹配时使用了Swift的恒等运算符===,该运算符的作用是判断两个类类型变量是否指向完全相同的内存实例,和你在ItemModel中实现的Equatable协议的==逻辑完全无关:
- 你自定义的
==规则是只要两个实例的id相等,就判定为逻辑相等 ===不会遵循上述规则,哪怕两个实例的所有属性、id完全一致,只要是不同的实例对象(内存地址不同),===的返回值就为false
你当前的场景就是数组中存在的是id相同的另一个SubItemModel实例,而非你传入方法的item本身,所以匹配失败返回nil。
修复方案
将判断条件替换为遵循你自定义相等规则的==即可:
public func removeItem(_ item:SubItemModel) -> Bool { if let index = layerItems.firstIndex(where: {$0 == item}) { item.cleanup() layerItems.remove(at: index) return true } return false }
也可以直接匹配id属性,效果一致:
if let index = layerItems.firstIndex(where: {$0.id == item.id}) {
内容的提问来源于stack exchange,提问作者Deepak Sharma
相关产品推荐
相关产品推荐

