Swift 在函数返回枚举时给我错误

标签 swift enums

为什么这不起作用?

enum SwitchStatus {
    case on
    case off
}

var switchStatus: SwitchStatus = .off

func flipSwitch() -> SwitchStatus {
    return !switchStatus
}

我在 return !switchStatus 收到这个错误:

Cannot convert value of type 'SwitchStatus' to expected argument type 'Bool'

如果我说返回 SwitchStatus,为什么它期望 Bool

最佳答案

! 是“逻辑非”运算符并采用 Bool 参数,因此 编译器已经在 !switchStatus 表达式上提示了。

您可以通过定义

! 扩展到 SwitchStatus 参数
prefix func !(arg: SwitchStatus) -> SwitchStatus

函数,但我实际上要做的是定义一个 flip() 方法, 类似于已被 added to Bool in Swift 4.2toggle() 方法:

enum SwitchStatus {
    case on
    case off

    mutating func flip() {
        switch self {
        case .on: self = .off
        case .off: self = .on
        }
    }
}

然后你可以做

var switchStatus: SwitchStatus = .on

switchStatus.flip() // Switch if off ...
switchStatus.flip() // ... and on again.

关于Swift 在函数返回枚举时给我错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51844405/

相关文章:

ios - 从 UITextField 子类捕获委托(delegate)方法而不是委托(delegate)

ios - 如何修复 Twilio 可编程语音错误 - 52134 无效的 APNs 设备 token

ios - 将 enumerateObjectsUsingBlock 转换为快速枚举 - Swift

iOS:如何在我的应用程序中设置铃声和警报音量

java - 我应该使用具有大量字段的枚举还是具有大量方法的类

java - 设置方法的状态

c++ - 我如何重载 << 以输出枚举的字符串值

ios - Swift Spritekit - 如果已经添加了相同的 Sprite ,则将其添加到场景时会出现问题

types - 强类型枚举作为 rust 中的联合 : How to determine type of value and retrieve it; How to do "constructors"

generics - 如何实现为通用枚举实现通用特征的过程宏?