swift - "Expression type ' Bool ' is ambiguous without more context"三元运算

标签 swift enums ternary-operator

我正在尝试将一个枚举传递给一个函数,该函数对该枚举的参数执行操作。我收到此错误:

表达式类型“Bool”在没有更多上下文的情况下不明确

同样的错误发生在等效的 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)
}

我怀疑枚举有问题以及我如何使用它们,但我还没有找到解决方案。

最佳答案

错误信息具有误导性。您要检查关联值 的枚举值,因此您必须将它们绑定(bind)在 case 模式中:

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)
    }
}

关于swift - "Expression type ' Bool ' is ambiguous without more context"三元运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53444232/

相关文章:

ios - 如何在可移动的两个UIView之间重新绘制连线

swift - 为什么我们不能将协议(protocol) `Encodable` 用作函数中的类型?

ios - 标签栏不显示在导航 Controller 内的 View Controller 上

java - 在任意键上使用EnumSet或EnumMap

enums - typescript 枚举开关不起作用

ios - 检测 iPhone 底部的凹凸

java - 在枚举的静态方法中引用枚举本身的值

javascript - 编写这个简写条件三元运算符来比较两个变量的正确方法是什么?

java - 为什么我不能用条件运算符替换 if 语句 (? :)?

C# 使用 "?"if else 语句设置值 whats this called