Swift给我函数错误并返回枚举

时间:2018-08-14 14:57:57

标签: swift enums

这为什么不起作用?

enum SwitchStatus {
    case on
    case off
}

var switchStatus: SwitchStatus = .off

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

我在return !switchStatus遇到此错误:

  

无法将类型“ SwitchStatus”的值转换为预期的参数类型“布尔”

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

3 个答案:

答案 0 :(得分:5)

!是“逻辑非”运算符,并接受一个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.

答案 1 :(得分:1)

您需要

return switchStatus == .on ? .off : .on

答案 2 :(得分:0)

Sh_Khan有正确的答案。而且您可能希望将该函数作为枚举的一部分

enum SwitchStatus {
    case on
    case off

    func flipSwitch() -> SwitchStatus {
        return self == .on ? .off : .on
    }
}