快速存储非文字枚举值

时间:2015-12-15 07:34:53

标签: 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 = UIColor(red: 191/255, green: 136/255, blue: 39/255, alpha: 1).CGColor
}

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

4 个答案:

答案 0 :(得分:3)

您正在混淆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 个案

 import java.awt.Color;
 import java.awt.Dimension;
 import javax.swing.JFrame;
 import javax.swing.JPanel;

public class DifferentColor extends JFrame{

JPanel p;

GradientColor(){
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(500, 500));
    this.getContentPane().setBackground(Color.yellow);        
    p = new JPanel();
    p.setPreferredSize(new Dimension(400, 400));
    p.setBackground(Color.red);
    this.add(p);
    this.pack();
    this.setVisible(true);
  }

  public static void main(String[] args) {
    // TODO code application logic here
      new DifferentColor ();
  }
}

然后你可以调用struct

的成员
   private static File getOutputMediaFile() {
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp");
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }
    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
            .format(new Date());
    File mediaFile;
    mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG"
            + timeStamp + ".jpg");

   /* mediaFile = new File(mediaStorageDir.getPath() + File.separator
            + "IMG_" + timeStamp + ".JPEG");*/
    return mediaFile;
}

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

答案 1 :(得分:1)

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

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

,用法就是这样:

let darkRed = UIColor.darkRed.CGColor

答案 2 :(得分: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;
    ...
    }
}

另一种选择是使用String并拆分并解析它,但更有可能是拼写错误。

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

答案 3 :(得分: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()