Swift 存储非文字枚举值

Swift 存储非文字枚举值,swift,enums,uicolor,Swift,Enums,Uicolor,我正在尝试创建一个可以在整个应用程序中使用的自定义颜色列表,以下是我当前的设置方式: 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 =

我正在尝试创建一个可以在整个应用程序中使用的自定义颜色列表,以下是我当前的设置方式:

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
}

我知道Swift不允许创建具有非文字值的枚举,但我正在寻找一种更好的替代方法,以使每个变量都是静态的。

您将
struct
enum
混为一谈

大括号之间的代码属于
struct
enum
有大小写

然后可以调用结构的成员

let myColor = Colors.darkRred

但是,命名约定是使用大写的枚举大小写和静态类型属性。

我个人会将枚举传递给类中的一个开关,或者只传递给定义了值的函数

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

正如瓦迪安已经提到的,我还将使用
结构。但是,如果出于任何原因想要使用
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()

我会创建一个带有计算静态属性的UIColor扩展:

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

let darkRed = UIColor.darkRed.CGColor

对不起,你为什么不喜欢这个解决方案?你认为一个更好的选择是什么?一个<代码> EnUM <代码>也可以有静态类型属性,比如“代码>结构> <代码>和<代码>类< /代码>。是的,但是在没有任何情况下创建<代码> EnUM <代码>是非常愚蠢的。你是对的,但是在这种情况下,你有一个真正的单体,没有任何初始化器。而在这种情况下,
struct
必须有一个私有初始值设定项,该初始值设定项仍可在其源文件中访问。存储的类型属性根据定义没有初始值设定项。从文档中可以看出:与存储实例属性不同,您必须始终为存储类型属性指定默认值。这是因为类型本身没有可以在初始化时为存储的类型属性赋值的初始值设定项。我不是说存储的类型属性。我指的是存储这些属性的类型。在这种情况下,
enum Colors
struct Colors
。文档中只说明了(Meta)类型(
Colors.self
)没有初始值设定项,但正如我所说的,
struct
至少可以在其源文件中进行初始化。请注意:命名枚举案例的Swift约定是“上驼峰大小写”。e、 喜欢红色=>喜欢知道。我应该再看一次会议,看看我犯的错误,哈哈。
let darkRed = UIColor.darkRed.CGColor