表达式类型 bool 在没有更多上下文的情况下是模棱两可的

Posted

技术标签:

【中文标题】表达式类型 bool 在没有更多上下文的情况下是模棱两可的【英文标题】:Expression type bool is ambiguous without more context 【发布时间】:2018-05-07 09:51:12 【问题描述】:

以下代码用于Swift 2

let endpoint = EndpointManager(endpoint: userType == .Pro ? .ProFollowing(identifier, url) : .FanFollowing(identifier, url), method: .get, parameters: nil)

现在它给出了错误:

以下解决方案对我有用:

var following : Endpoint
if userType == .pro 
        following = Endpoint.proFollowing(identifier,url)

else 
        following = Endpoint.fanFollowing(identifier,url)

let endpoint = EndpointManager(endpoint: following, method: .get, parameters: nil)

【问题讨论】:

添加更多代码,例如userType 您不应该使用这样的长行代码。太坏了。请先将代码分开。 这样写: let endpoint = EndpointManager(endpoint: (userType == .Pro) ? (.ProFollowing(identifier, url)) : (.FanFollowing(identifier, url)), 方法: .get,参数:无)。 没有解决错误 如果我创建它需要的类型,这段代码对我来说很好。我怀疑您的一些枚举案例已重命名为前导小写。检查.Pro 不是不是.pro.ProFollowing 现在不是.proFollowing 等。否则,将其分解为包含类型定义的示例(我怀疑创建该示例将解决你的问题) 【参考方案1】:

你必须用括号包裹布尔参数:

let isProFollowing = userType == .Pro ? .ProFollowing(identifier, url)
let following: YourEnumType = isProFollowing ? .ProFollowing(identifier, url) : .FanFollowing(identifier, url)
let endpoint = EndpointManager(endpoint: following, method: .get, parameters: nil)

冒号会混淆你的 XCode

【讨论】:

@PujaJadhav 我已经更改了代码。使用我更新的帖子 @Vyacheslav Swift 4 支持非括号内联 ifs。 @staticVoidMan 有时表达式可能太复杂而无法解析。 @Vyacheslav 我讨厌内联 if,所以我避免使用它们,但您的回答表明这是不允许的/不可能的。只是想指出这一点。 @staticVoidMan 你的意思是let following = 类型定义吗?

以上是关于表达式类型 bool 在没有更多上下文的情况下是模棱两可的的主要内容,如果未能解决你的问题,请参考以下文章

表达式类型“()”在没有更多上下文的情况下是模棱两可的

Alamofire 类型的表达式在没有更多上下文的情况下是模棱两可的

如何修复“表达式类型'@lvalue CGRect/CGSize'在没有更多上下文的情况下模棱两可”?

在没有更多上下文的情况下使表达式类型模棱两可

在没有更多上下文的情况下使表达式类型模棱两可

Swift for 循环“表达式类型 '[[String : String]]' 在没有更多上下文的情况下模棱两可