2015-12-15 91 views
1

我想創建自定義顏色列表,我可以在我的應用程序中使用,並在這裏是如何我目前有它設置:存儲非字面枚舉迅速值

enum Colors { 
    static let darkRed = UIColor(red: 181/255, green: 0, blue: 0, alpha: 1).CGColor 
    static let brown = UIColor(red: 134/255, green: 83/255, blue: 4/255, alpha: 1).CGColor 
    static let tan = UIColor(red: 191/255, green: 136/255, blue: 39/255, alpha: 1).CGColor 
} 

我知道斯威夫特不允許創建帶有非文字值的枚舉,但我正在尋找一個更好的替代方法來使每個變量都是靜態的。

+2

對不起,您爲什麼不喜歡這個解決方案?它看起來不錯 – katleta3000

+0

你認爲什麼是更好的選擇? – Qbyte

回答

3

您在混合structenum

您在大括號之間的代碼屬於structenum個案

struct Colors { 
    static let darkRed = UIColor(red: 181/255, green: 0, blue: 0, alpha: 1).CGColor 
    static let brown = UIColor(red: 134/255, green: 83/255, blue: 4/255, alpha: 1).CGColor 
    static let tan = UIColor(red: 191/255, green: 136/255, blue: 39/255, alpha: 1).CGColor 
} 

然後你就可以調用結構

let myColor = Colors.darkRred 

的成員不過的命名約定是使用大寫枚舉的情況下,靜態類型屬性。

+0

'enum'也可以有靜態類型的屬性,比如'struct'和'class'。 – Qbyte

+0

是的,但沒有任何情況下創建一個'枚舉'是非常愚蠢的。 – vadian

+0

你是對的,但在這種情況下,你有一個真正的單身人士沒有任何初始化。而在這種情況下,'struct'必須有一個私有的初始化器,它仍然可以在其源文件中被訪問。 – Qbyte

0

就我個人而言,我會將枚舉傳遞給一個開關,無論是在類中還是僅在定義了值的函數中。

enum ColorType { 
    case FANCY_RED 
    case BLUE 
} 

func makeColor(color: ColorType) -> CGColor{ 
    switch(color){ 
    case .BLUE: 
     return UIColor(red: 0, green: 0, blue: 151/255, alpha: 1).CGColor; 
    ... 
    } 
} 

另一種選擇是使用一個字符串和拆分和解析它,但錯字更可能。

enum Color: String { 
    case FANCY_RED = "1, 0, 0, 1" 
} 
+0

只是一個說明:命名枚舉案的Swift約定是「上駱駝案」。例如FANCY_RED => FancyRed – Qbyte

+0

很高興知道。我應該再看看這些會議來抓住我一直在做的失禮。 – ataboo

0

正如vadian所提到的,我也會使用struct。但是如果你想,無論出於何種原因,使用enum您可以創建相同的行爲:

enum Colors { 
    case darkRed, brown, tan 

    func color() -> CGColor{ 
     switch self{ 
     case .darkRed: 
      return UIColor(red: 181/255, green: 0, blue: 0, alpha: 1).CGColor 
     case .brown: 
      return UIColor(red: 134/255, green: 83/255, blue: 4/255, alpha: 1).CGColor 
     case .tan: 
      return UIColor(red: 191/255, green: 136/255, blue: 39/255, alpha: 1).CGColor 
     } 
    } 
} 

然後你得到的值用:

let myColor = Colors.darkRed.color() 
1

我剛剛創建了一個擴展的UIColor與計算靜態屬性:

extension UIColor{ 
    static var darkRed: UIColor{ 
    return UIColor(red: 181/255, green: 0, blue: 0, alpha: 1) 
    } 
} 

和使用將是這樣的:

let darkRed = UIColor.darkRed.CGColor