Swift报错疑问:为何Subscript 'subscript(_:)'要求'R'遵循RangeExpression?
Swift下标错误原因分析
错误原因
你遇到的Subscript 'subscript(_:)' requires that 'R' conform to 'RangeExpression'错误,本质是类型不匹配导致编译器类型推断混乱:
subDict是[String: Any]类型的字典,它的下标仅接受String类型的键(下标签名为subscript(key: String) -> Any?)。- 但代码中用来下标访问的
key是Any类型(来自keyPath.first),编译器无法将Any类型直接匹配到字典的String键下标,反而误匹配到了其他集合的范围下标(比如数组的范围下标方法),因此抛出了指向RangeExpression的错误提示。
修复方案
需要先将key安全强转为String类型,确保和字典的键类型匹配,修改出错的代码行:
if let subDict = toObject as? [String: Any], let stringKey = key as? String, let subValue = subDict[stringKey] {
内容的提问来源于stack exchange,提问作者János
相关产品推荐
相关产品推荐

