【发布时间】:2016-05-27 17:01:44
【问题描述】:
为什么我不能用这样的原始值定义枚举?
enum Edges : (Double, Double) {
case TopLeft = (0.0, 0.0)
case TopRight = (1.0, 0.0)
case BottomLeft = (0.0, 1.0)
case BottomRight = (1.0, 1.0)
}
【问题讨论】:
为什么我不能用这样的原始值定义枚举?
enum Edges : (Double, Double) {
case TopLeft = (0.0, 0.0)
case TopRight = (1.0, 0.0)
case BottomLeft = (0.0, 1.0)
case BottomRight = (1.0, 1.0)
}
【问题讨论】:
元组不能是枚举的原始值类型。来自The Swift Programming Language:
原始值可以是字符串、字符或任何整数或浮点数类型。
你可以创建一个自定义的 getter:
enum Edges {
case TopLeft, TopRight, BottomLeft, BottomRight
var rawValue: (Double, Double) {
switch self {
case .TopLeft: return (0, 0)
case .TopRight: return (1, 0)
case .BottomLeft: return (0, 1)
case .BottomRight: return (1, 1)
}
}
}
【讨论】:
原始值可以是字符串、字符或任何整数或浮点数类型。
但您有一个替代解决方案:
enum Edges {
case TopLeft
case TopRight
case BottomLeft
case BottomRight
func getTuple() -> (Double, Double) {
switch self {
case .TopLeft:
return (0.0, 0.0)
case .TopRight:
return (1.0, 0.0)
case .BottomLeft:
return (0.0, 1.0)
case .BottomRight:
return (1.0, 1.0)
}
}
}
let a = Edges.BottomLeft
a.getTuple() // returning (0, 1)
【讨论】:
case TopLeft = 1, case TopRight = 1, case BottomLeft = 3, case BottomRight = 4 是不允许的,因为 1 加倍。