Swift中如何结合下标使用if-let?报错问题求助
Swift中if-let结合下标时的类型错误分析
错误信息
引用Optional的下标'subscript(_:)'要求类型'[String : Api]'和'any Primitive'等价
问题代码片段
if let key = key, let team = sharedState.team(), let api = team.apis[key], // <------- 报错行
模型定义
struct Api: Codable { var url: String var method: String } struct Team: Codable { var apis: [String: Api]? // apis是可选字典 }
问题原因
team.apis被定义为可选类型[String: Api]?,直接对可选值使用下标[key]时,Swift会尝试调用Optional的内置下标方法,但该方法要求集合类型遵循Primitive协议,而[String: Api]并不符合这个要求,因此触发类型不匹配的错误。
解决方法
有两种可行的修复方式:
先解包可选字典,再取下标
先把可选的apis解包成非可选字典,再通过下标获取对应值:if let key = key, let team = sharedState.team(), let apis = team.apis, let api = apis[key] { // 在这里处理获取到的api }使用可选链调用下标
通过?对可选字典进行链式调用下标,直接获取可选的Api值:if let key = key, let team = sharedState.team(), let api = team.apis?[key] { // 在这里处理获取到的api }
内容的提问来源于stack exchange,提问作者János
相关产品推荐
相关产品推荐

