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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:47