考虑一下:
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
}
let leftEdge = Line.Horizontal(0.0)
let leftMaskRightEdge = Line.Horizontal(0.05)
我如何访问,比如说,lefEdge
的关联值,直接,而不使用开关语句?
let noIdeaHowTo = leftEdge.associatedValue + 0.5
这根本不能编译!
我看了一下 这些 那么 问题,但似乎没有一个答案能解决这个问题。
上面的 noIdeaHowTo
非编译行实际上应该是一行程序,但是因为 associated value
可以是任何类型,我甚至看不到用户代码如何在 le enum 本身中编写一个“通用”get 或者 AssociatedValue 方法。
我最终得到了这个,但是它很恶心,每次我添加/修改一个案例时都需要重新检查代码..。
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
}
}
}
}
有什么建议吗?