swift - 三元运算中的“表达式类型'Bool'在没有更多上下文的情况下是模棱两可的”
问题描述
我正在尝试将枚举传递给对该枚举的参数执行操作的函数。我收到此错误:
Expression type 'Bool' is ambiguous without more context
同样的错误发生在等效的 if 子句中,因此导致问题的不是三元运算符本身。
enum auto {
case pkw (SerialNumber: String, Axles: Int, Weight: Float)
case lkw (SerialNumber: String, Axles: Int, Weight: Float)
}
func checkIntegrity(car: auto) -> Bool {
switch car {
case .pkw:
if (checkSerialNumber(serialNumber: .pkw.SerialNumber.rawValue)
&& checkWeight(weight: .pkw.Weight.rawValue)) { // Error here, "&&" is underlined
return true
} else {
return false
}
break;
case .lkw:
return (checkSerialNumber(serialNumber: .lkw.SerialNumber.rawValue)
&& checkWeight(weight: .lkw.Weight.rawValue)) ? true : false; // same error here, "&&" is underlined
break;
default:
return false
}
其他被调用的函数只返回一个 Bool:
func checkSerialNumber(serialNumber: String) -> Bool {
return serialNumber.contains("ABABWA") // changed after a hint in the comments
}
func checkWeight(weight: Float) -> Bool {
return (weight < 2)
}
我怀疑枚举以及我如何使用它们有问题,但我还没有找到解决方案。
解决方案
错误消息具有误导性。您要检查枚举值的关联值,因此必须在案例模式中绑定这些值:
func checkIntegrity(car: auto) -> Bool {
switch car {
case let .pkw(serialNumber, _, weight):
if checkSerialNumber(serialNumber: serialNumber)
&& checkWeight(weight: weight) {
return true
} else {
return false
}
break;
case let .lkw(serialNumber, _, weight):
return (checkSerialNumber(serialNumber: serialNumber)
&& checkWeight(weight: weight)) ? true : false;
break;
default:
return false
}
}
这可以简化为
func checkIntegrity(car: auto) -> Bool {
switch car {
case let .pkw(serialNumber, _, weight),
let .lkw(serialNumber, _, weight):
return checkSerialNumber(serialNumber: serialNumber) && checkWeight(weight: weight)
}
}
推荐阅读
- c# - 将 DbContext 和 DbSets 中的接口用于类似数据库
- snowflake-cloud-data-platform - 将上次更改时间戳添加到雪花表中
- angular - Angular Slickgrid 使用列标题重新加载数据
- bash - bash中目录的完整性
- asp.net-core - 如何允许其他人使用 LocalDb 运行 Web App
- javascript - 在javascript中保持后端功能打开
- scripting - 用于终止 Websphere 应用程序服务器上所有 JVM 的 Jython 脚本
- c - NGINX 源代码;ngx_cdecl 和 char *const *argv 的问题
- python - 问题从Python中for循环中具有相同日期的两个数据框的列中减去值
- javascript - Discord js角色编辑不改变颜色