枚举原始值

时间:2016-05-27 17:01:44

标签: swift rawrepresentable

为什么我无法使用这样的原始值定义枚举?

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)
}

2 个答案:

答案 0 :(得分:4)

元组不能是枚举的原始值类型。来自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)
        }
    }
}

答案 1 :(得分:3)

Because

  

原始值可以是字符串,字符或任何整数或浮点数类型。

但是有一个替代解决方案:

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)