【发布时间】:2016-02-19 12:43:10
【问题描述】:
假设我们有这个数据结构:
enum Vehicle: Equatable {
enum Car {
case BMW(Int)
case Audi(Int)
}
enum Bike {
case Ducatti(Int)
case Honda(Int)
}
}
表示各种车辆,其马力为相关值。
我正在尝试遵守Equatable 协议,以便能够执行Vehicle 等效但没有成功。
我正在尝试:
func ==(a: Vehicle, b: Vehicle) -> Bool {
switch(a, b) {
case(let Car.BMW(hp1), let Car.BMW(hp2)):
return hp1 == hp2
default:
return false
}
}
但编译器抱怨invalid pattern。
那么对于包含嵌套枚举和关联值的枚举,我们如何才能正确地遵守Equatable 协议呢?
【问题讨论】:
-
我不清楚 Vehicle 是一个有效的枚举——它当然没有实际的枚举值——你所做的只是声明两种类型......
-
绝对有效。
let value = Vehicle.Car.BMW(2500)工作正常。 -
不,
value不是Vehicle,而是Vehicle.Car。检查其.dynamicType -
嗯...应该是
Vehicle.Car,不是吗? -
不,
value的 value 应该是 Vehicle.Car,而不是它的 dynamicType...