引用没有关联值的Swift枚举成员
发布时间:2020-12-14 05:01:16 所属栏目:百科 来源:网络整理
导读:我有以下枚举: enum State: Equatable { case Loading case Finished case Error(message: String)}func ==(lhs: State,rhs: State) - Bool { //...} 我希望能够比较枚举成员.我有重载==运算符,它有效,但有一个问题: let state: State = .Loading// works
我有以下枚举:
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相关的错误消息,我只需要知道是否发生了错误.切换实际上这是可能的,所以我不知道为什么常规语句是有限的. 我不得不承认我没有密切关注Swift 2.我应该期待新版本的一些改进吗?另一个问题是,在它发布之前,是否有任何解决方法? 解决方法
Enums与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") } 希望这可以帮助 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |