我有以下枚举:
enum State: Equatable {
case Loading
case Finished
case Error(message: String)
}
func ==(lhs: State, rhs: State) -> Bool {
//...
}
Run Code Online (Sandbox Code Playgroud)
我希望能够比较枚举成员.我有重载==运算符,它工作,但有一个问题:
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
Run Code Online (Sandbox Code Playgroud)
这似乎是编译器的限制.我不明白为什么我不应该在没有相关值的情况下引用枚举成员.显然我不关心与之关联的错误消息.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")
}
Run Code Online (Sandbox Code Playgroud)
Swift 2.0 将带来另一种您可能会喜欢的控制流语法:
if case .Error(message: _) = state {
print("An Error")
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
2254 次 |
| 最近记录: |