我正在尝试创建一个可以在整个应用中使用的自定义颜色列表,以下是我目前的设置方式:
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不允许创建具有非文字值的枚举,但我正在寻找一种更好的替代方法,使每个变量都是静态的。
答案 0 :(得分:3)
您正在混淆struct
和enum
。
大括号之间的代码属于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()