考虑:
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
}
let leftEdge = Line.Horizontal(0.0)
let leftMaskRightEdge = Line.Horizontal(0.05)
我怎么能够直接访问 lefEdge
的关联值,而不使用 switch 语句呢?
let noIdeaHowTo = leftEdge.associatedValue + 0.5
这甚至无法编译!
上面的 noIdeaHowTo
无法编译的代码行应该是那个一行代码,但由于 关联值(associated value)
可以是任何类型,我甚至无法看到用户代码如何在枚举本身中编写一个 "通用" 的获取或 associatedValue 方法。
最终,我得到了以下代码,但它很糟糕,并且每次添加 / 修改 case 都需要重新访问代码 ...
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
var associatedValue: CGFloat {
get {
switch self {
case .Horizontal(let value): return value
case .Vertical(let value): return value
}
}
}
}
有指针的吗?
Horizontal
实例。 - Arkkuif
语句中执行此操作,这比switch更紧凑:if case .Horizontal(let value) = leftEdge { print("value = \(value)") }
- vacawama