2016-05-27 7 views
2

なぜこのような生の値で列挙を定義できないのですか?生の値を持つ列挙

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

答えて

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) 
+0

をあなたにこのコードの作品を​​ありがとうございました。しかし、**について説明することができます**それぞれの生の値は列挙宣言内で一意でなければなりません** –

+0

@Alexanderは、同じ生の値を持つ2つの異なる列挙型エントリを作成してはいけないことを意味します。例えば 'case TopLeft = 1、case TopRight = 1、BottomLeft = 3の場合、BottomRight = 4の場合は、2倍の '1'のため許可されません。 – luk2302

+0

私のデータはあなたのものと同じですので、私は前に事例を宣言しなければなりませんか? –

4

タプルは列挙型の生の値の型にすることはできません。 The Swift Programming Language

生の値は、文字列、文字、整数型または浮動小数点型のいずれでもかまいません。

あなたはしかし、カスタムゲッターを作成することができます。

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) 
     } 
    } 
} 
関連する問題