gpt4 book ai didi

swift - 在没有关联值的情况下引用 Swift 枚举成员

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:29 25 4
gpt4 key购买 nike

我有以下枚举:

enum State: Equatable {
case Loading
case Finished
case Error(message: String)
}

func ==(lhs: State, rhs: State) -> Bool {
//...
}

我希望能够比较枚举成员。我已经重载了 == 运算符,它可以工作,但是有一个问题:

let state: State = .Loading

// works just fine
let thisWorks = state == .Finished

// this does as well
let thisWorks2 = state == .Error("Derp!")

// this, however, does not, compiler error: "Could not find member 'Error'"
let thisDoesnt = state == .Error

这似乎是一个编译器限制。我不明白为什么我不能在没有关联值的情况下引用枚举成员。显然我不关心与 .Error 相关的错误消息,我只需要知道是否发生了错误。这实际上可以通过 switch 实现,所以我不知道为什么常规语句会受到限制。

我不得不承认我没有仔细研究过 Swift 2。我应该期待新版本的一些改进吗?另一个问题是,在发布之前,是否有任何解决方法?

最佳答案

枚举与 switch 配合得很好:

let state: State = .Error(message: "Foo")

switch state {
case .Loading:
print("Loading")
case .Finished:
print("Finished")
case .Error(message: "Foo"):
print("Foo!!!")
case .Error(message: _):
print("Some other error")
}

Swift 2.0 将带来另一种您可能会喜欢的控制流语法:

swift 2.0

if case .Error(message: _) = state {
print("An Error")
}

希望对你有帮助

关于swift - 在没有关联值的情况下引用 Swift 枚举成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com