2014-10-06 73 views
0

我有一個2維數組,我試圖用來將一組值從挑選器映射到一組特定的值。我想使它可讀,所以我試圖使用C風格,並將我的值集合定義爲常量,然後在初始化中使用它們,但是我得到一個錯誤,告訴我我的類沒有一個名爲常量的成員。我在操場上進行了測試,所有工作都很有效,因爲操場是解釋性的。任何人有任何想法如何最好地解決這個問題。我知道如何從技術角度解決問題,但對維護可讀性仍然過於執着。下面是代碼吸管使用常量初始化一個快速數組

// definitions for FORCE objects 

let LIVELY    = 0 
let LIGHT    = 1 
let ROUNDED    = 2 
let POWERFUL   = 3 
let CHAMPAGNE   = 4 
let SUCREBLANC   = 5 
let SUCREROUGEOUBLANC = 6 
let SUCREROUGE   = 7 
let CHAMPAGNEROSE  = 8 
let ROSE    = 9 

//definitions for SAVEUR objects 

let FLORAL    = 0 
let FRUITY    = 1 
let OAKY    = 2 
let SPICY    = 3 

let redForceNamePointerArray = [ 
    /*   1  2  3  4  5  6   7    8   9  10  11   12 */ 
    /* 1 */ [LIGHT,ROUNDED,POWERFUL,NOIMAGE,LIGHT,CHAMPAGNE,SUCREROUGEOUBLANC,CHAMPAGNE,ROUNDED,ROUNDED,SUCREBLANC,POWERFUL], 
    /* 1 */ [LIGHT,ROUNDED,POWERFUL,NOIMAGE,LIGHT,CHAMPAGNE,SUCREROUGEOUBLANC,CHAMPAGNE,ROUNDED,ROUNDED,SUCREBLANC,POWERFUL], 
    /* 1 */ [LIGHT,ROUNDED,POWERFUL,NOIMAGE,LIGHT,CHAMPAGNE,SUCREROUGEOUBLANC,CHAMPAGNE,ROUNDED,ROUNDED,SUCREBLANC,POWERFUL], 
    /* 1 */ [LIGHT,ROUNDED,POWERFUL,NOIMAGE,LIGHT,CHAMPAGNE,SUCREROUGEOUBLANC,CHAMPAGNE,ROUNDED,ROUNDED,SUCREBLANC,POWERFUL], 
    /* 1 */ [LIGHT,ROUNDED,POWERFUL,NOIMAGE,LIGHT,CHAMPAGNE,SUCREROUGEOUBLANC,CHAMPAGNE,ROUNDED,ROUNDED,SUCREBLANC,POWERFUL], 
    /* 1 */ [LIGHT,ROUNDED,POWERFUL,NOIMAGE,LIGHT,CHAMPAGNE,SUCREROUGEOUBLANC,CHAMPAGNE,ROUNDED,ROUNDED,SUCREBLANC,POWERFUL]]; 

l 
+0

是的所以你有一個無關的1在最後。也許是SO錯誤或可能是你的問題。 – davecom 2014-10-06 22:07:05

+0

額外的L,也沒有不變的名字NOIMAGE – 2014-10-06 22:25:03

回答

2

常量初始值設定項不能引用類中的其他常量。這是語言或編譯器的限制。這裏有一個選擇:

class C { 
    enum Image: Int { 
     case NOIMAGE = -1 
     case LIVELY 
     case LIGHT 
     case ROUNDED 
     case POWERFUL 
     case CHAMPAGNE 
     case SUCREBLANC 
     case SUCREROUGEOUBLANC 
     case SUCREROUGE 
     case CHAMPAGNEROSE 
     case ROSE 
    } 

    enum Flavor: Int { 
     case FLORAL = 0 
     case FRUITY 
     case OAKY 
     case SPICY 
    } 

    let redForceNamePointerArray: [[Image]] = { 
     typealias I = Image 
     return [ 
      /*   1  2  3  4  5  6   7    8   9  10  11   12 */ 
      /* 1 */ [I.LIGHT,I.ROUNDED,I.POWERFUL,I.NOIMAGE,I.LIGHT,I.CHAMPAGNE,I.SUCREROUGEOUBLANC,I.CHAMPAGNE,I.ROUNDED,I.ROUNDED,I.SUCREBLANC,I.POWERFUL], 
      /* 1 */ [I.LIGHT,I.ROUNDED,I.POWERFUL,I.NOIMAGE,I.LIGHT,I.CHAMPAGNE,I.SUCREROUGEOUBLANC,I.CHAMPAGNE,I.ROUNDED,I.ROUNDED,I.SUCREBLANC,I.POWERFUL] 
     ] 
    }() 
} 

但現在redForceNamePointerArray的元素C.Image,而不是Int。如果你真的想讓他們成爲Int

let redForceNamesInt: [[Int]] = { 
     typealias I = Image 
     return [ 
      /*   1  2  3  4  5  6   7    8   9  10  11   12 */ 
      /* 1 */ [I.LIGHT,I.ROUNDED,I.POWERFUL,I.NOIMAGE,I.LIGHT,I.CHAMPAGNE,I.SUCREROUGEOUBLANC,I.CHAMPAGNE,I.ROUNDED,I.ROUNDED,I.SUCREBLANC,I.POWERFUL], 
      /* 1 */ [I.LIGHT,I.ROUNDED,I.POWERFUL,I.NOIMAGE,I.LIGHT,I.CHAMPAGNE,I.SUCREROUGEOUBLANC,I.CHAMPAGNE,I.ROUNDED,I.ROUNDED,I.SUCREBLANC,I.POWERFUL] 
     ].map { $0.map { $0.rawValue } } 
    }() 
+0

感謝羅布的枚舉方法將工作!沒有必要有整數 – JBelbute 2014-10-18 21:22:10