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

Swift错误:No exact matches in call to subscript 问题解决咨询

解决Swift中「No exact matches in call to subscript」错误

嘿,这个错误我之前写Swift的时候也踩过坑,咱们来一步步搞定它~

错误原因

你遍历字符串str的时候,拿到的每一个i是**Character类型**,但你的字典dic的key是**String类型**。Swift是强类型语言,这俩类型完全不兼容,所以调用字典下标dic[i]的时候,找不到参数类型匹配的下标方法,就抛出了这个「No exact matches in call to subscript」错误。

两种解决方案

方案1:把Character转成String再用

直接把遍历得到的Character转成String,作为字典的下标参数,这样类型就匹配了:

let dic = ["a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7, "h": 8, "i": 9, "j": 10, "k": 11, "l": 12, "m": 13, "n": 14, "o": 15, "p": 16, "q": 17, "r": 18, "s": 19, "t": 20, "u": 21, "v": 22, "w": 23, "x": 24, "y": 25, "z": 26]
var newwrd = ""
for i in str ?? "" {
    let ci = dic[String(i)] // 这里将Character转为String,解决类型不匹配问题
    // 建议用可选绑定安全处理返回的可选值
    if let charValue = ci {
        newwrd += String(charValue)
        // 或者根据你的需求做其他处理
    }
}

方案2:修改字典的key类型为Character

如果你的场景里经常需要用Character作为key查询,不如直接把字典的类型声明为[Character: Int],这样遍历字符串拿到的Character就能直接用了:

// 明确声明字典的key为Character类型
let dic: [Character: Int] = ["a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7, "h": 8, "i": 9, "j": 10, "k": 11, "l": 12, "m": 13, "n": 14, "o": 15, "p": 16, "q": 17, "r": 18, "s": 19, "t": 20, "u": 21, "v": 22, "w": 23, "x": 24, "y": 25, "z": 26]
var newwrd = ""
for i in str ?? "" {
    let ci = dic[i] // 现在类型完全匹配,不会报错
    // 同样建议用可选绑定处理nil情况
    if let charValue = ci {
        newwrd += String(charValue)
    }
}

额外提示

因为字典的下标访问返回的是可选值(如果key不存在,会返回nil),所以一定要用if let或者guard let来安全处理,避免后续代码碰到nil导致崩溃哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:24:08