Swift字典报错“Value of type Int? has no member index”怎么修复?
问题分析与修复方案
首先咱们先揪出报错的根源:你定义的downloadQ是[Int: Int]类型——也就是键是Int,值是单个Int值,但你却尝试调用index(of:)方法,这个方法是Array(数组)类型的专属方法,单个Int值根本没有这个成员,所以编译器才会抛出Value of type 'Int?' has no member 'index'的错误。
接下来分两种场景给你修复方案,你可以根据自己的实际需求选择:
场景1:你确实需要字典的值是单个Int(初始定义正确)
如果你的需求只是删除字典中键为id的条目,那根本不需要找什么索引,直接用字典的内置方法就能搞定:
// 直接删除指定键的条目,即使键不存在也不会报错 downloadQ.removeValue(forKey: id)
或者如果你想先确认键存在再删除(可选):
if downloadQ.keys.contains(id) { downloadQ.removeValue(forKey: id) }
场景2:你原本想让字典的值是数组(一个id对应多个row索引)
看起来你可能一开始就搞错了字典的类型——如果你的需求是一个id对应多个indexPath.row值,那字典的类型应该是[Int: [Int]](键是Int,值是Int数组)。这种情况下,你的代码可以这么修改:
第一步:修正字典定义
var downloadQ = [Int: [Int]]()
第二步:正确添加元素到数组中
// 给指定id对应的数组添加row索引 if var existingRows = downloadQ[id] { existingRows.append(indexPath.row) downloadQ[id] = existingRows } else { // 如果id还不存在,就创建一个包含当前row的新数组 downloadQ[id] = [indexPath.row] }
第三步:删除指定id下的某个row索引
if var rows = downloadQ[id], let targetIndex = rows.index(of: indexPath.row) { rows.remove(at: targetIndex) // 可选:如果删除后数组为空,把这个id的条目也删掉,避免空数组占用空间 if rows.isEmpty { downloadQ.removeValue(forKey: id) } else { downloadQ[id] = rows } }
这样就能顺利实现你想要的“查找指定键对应值并删除该值”的需求了。
内容的提问来源于stack exchange,提问作者user8703776
相关产品推荐
相关产品推荐

