为什么这不起作用?

enum SwitchStatus {
    case on
    case off
}

var switchStatus: SwitchStatus = .off

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

我在return !switchStatus处得到这个错误:
无法将“switchstatus”类型的值转换为所需的参数类型“bool”
如果我说return,它为什么会期望Bool

最佳答案

!是“logical not”运算符,并接受一个Bool参数,因此
编译器已经在!switchStatus表达式上抱怨了。
您可以通过定义

prefix func !(arg: SwitchStatus) -> SwitchStatus

函数,但实际上我要做的是定义一个!方法,
类似于SwitchStatus方法:
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.

10-04 14:29