作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
<分区>
我在使用枚举时遇到了一个我无法理解的问题。
这里是一个枚举类型的声明:
enum SomeType {
case un
case deux
case trois
}
然后我想用 if
语句匹配单个枚举值:
var testValue: SomeType = .trois
if testValue == .trois {
// Do something
}
一切都很好!
现在我只想向第一个成员值添加一个关联值:
enum SomeType {
case un(Int)
case deux
case trois
}
var testValue: SomeType = .trois
if testValue == .trois {
// Do something
}
if
语句中出现错误:Could not find member 'trois'
这是否意味着枚举只能使用 switch
语句来匹配?
精度
我想要实现的是:“testValue是否具有'trois'的成员值而不考虑关联值”。换句话说,如何仅匹配成员值的枚举。
这里是实现 Airspeed Velocity 的解决方案答案:
// Test equality only on member value
func == (lhs:SomeType, rhs:SomeType) -> Bool {
switch (lhs, rhs) {
case (.un(let lhsNum), .un(let rhsNum)):return true
case (.deux, .deux): return true
case (.trois, .trois): return true
default: return false
}
}
// Test equality on member value AND associated value
func === (lhs:SomeType, rhs:SomeType) -> Bool {
switch (lhs, rhs) {
case (.un(let lhsNum), .un(let rhsNum)) where lhsNum == rhsNum: return true
case (.deux, .deux): return true
case (.trois, .trois): return true
default: return false
}
}
var testValue = SomeType.un(3)
// Tests
if testValue == .un(1) {
println("Same member value")
}
if testValue === .un(3) {
println("Same member value AND same associated contents")
}
我是一名优秀的程序员,十分优秀!