如何在Swift中检查带关联值的枚举的枚举情况

4

我正在尝试检查一个带有关联值的枚举的情况,就像这样:

enum status {
    case awake(obj1)
    case sleeping(obj2)
    case walking(obj3)
    case running(obj4)
}

我使用if(status == deviceStatus.awake){来检查状态情况,但是出现了一个错误:二元运算符“==”不能应用于类型为“status”的操作数和“(obj1) -> status”

1
你在哪里定义了你的设备状态(deviceStatus)? 这些对象(obj1, obj2, ...)是什么类型的? - Shoaib
可能是 https://dev59.com/N1wZ5IYBdhLWcg3wWvRY 的重复问题。 - Jeremy
1个回答

12
你可以使用if case .awake = deviceStatus来检查deviceStatus是否被设置为awake枚举值:
class Obj1 { }
class Obj2 { }
class Obj3 { }
class Obj4 { }

enum Status {
    case awake(Obj1)
    case sleeping(Obj2)
    case walking(Obj3)
    case running(Obj4)
}

let deviceStatus = Status.awake(Obj1())

if case .awake = deviceStatus {
    print("awake")
} else if case .sleeping = deviceStatus {
    print("sleeping")
}

// you can also use a switch statement

switch deviceStatus {
case .awake:
    print("awake")
case .sleeping:
    print("sleeping")
default:
    print("something else")
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接