Swift中"Expression type bool is ambiguous"错误该如何解决?
解决Swift中三元表达式类型歧义错误:Expression type bool is ambiguous without more context
问题重现
之前在Swift 2中运行完全正常的代码,升级到新版本Swift后触发了这个报错:
let endpoint = EndpointManager(endpoint: userType == .Pro ? .ProFollowing(identifier, url) : .FanFollowing(identifier, url), method: .get, parameters: nil)
错误提示:Expression type bool is ambiguous without more context
为什么会报错?
Swift的新版本对类型推断的规则做了收紧。虽然ProFollowing和FanFollowing同属Endpoint枚举的case,但编译器没办法仅通过三元表达式就确定两边的返回值类型是统一的Endpoint——如果枚举case的关联值存在细微差异,或者编译器自动推导时找不到明确的类型线索,就会抛出这个类型歧义的错误。
可行的解决方法
我们可以通过显式声明变量类型+分支赋值的方式,给编译器明确的类型提示,消除歧义:
// 先明确声明变量类型为Endpoint var following: Endpoint if userType == .pro { following = Endpoint.proFollowing(identifier, url) } else { following = Endpoint.fanFollowing(identifier, url) } // 再用这个明确类型的变量初始化EndpointManager let endpoint = EndpointManager(endpoint: following, method: .get, parameters: nil)
这种方式把枚举case的赋值逻辑拆解开,让编译器清晰知道following的类型是Endpoint,自然就不会再出现类型推断的问题了。
内容的提问来源于stack exchange,提问作者Puja Jadhav
相关产品推荐
相关产品推荐

