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
相关产品推荐
相关产品推荐

