我在数组中存储了几个UIColors并更改了我的代码,将它们作为函数的返回值作为UIColor扩展。
数组版本:
var colors : [UIColor] = [UIColor(red:0.35, green:0.40, blue:0.45, alpha:1.00), UIColor(red:0.38, green:0.78, blue:0.56, alpha:1.00), UIColor(red:0.61, green:0.73, blue:0.38, alpha:1.00)]
扩展版本:
extension UIColor{
class func getColor(level: Double) -> UIColor{
switch level{
case 0:
return UIColor(red:0.35, green:0.40, blue:0.45, alpha:1.00)
case 1:
return UIColor(red:0.38, green:0.78, blue:0.56, alpha:1.00)
case 2:
return UIColor(red:0.61, green:0.73, blue:0.38, alpha:1.00)
default:
return UIColor(red:0.35, green:0.40, blue:0.45, alpha:1.00)
}
}
}
因此我可以使用colors[0]
UIColor.getColor(level: 0)
这样做是否有任何意义,是否更好?
答案 0 :(得分:2)
作为另一种选择,您可以将它们全部存储为单独的静态值。 UIColor
已经以这种方式存储了一些颜色(例如,UIColor.red
等同于UIColor(red: 1, green: 0, blue: 0, alpha: 1)
),因此这样做会更加一致。那会给你这个:
extension UIColor {
static let color1 = (red:0.35, green:0.40, blue:0.45, alpha:1.00)
static let color2 = (red:0.38, green:0.78, blue:0.56, alpha:1.00)
static let color3 = (red:0.61, green:0.73, blue:0.38, alpha:1.00)
static let color4 = (red:0.35, green:0.40, blue:0.45, alpha:1.00)
}
答案 1 :(得分:1)
扩展的一个可能的好处是跨多个类的更广泛使用。但是如果为常量创建Singleton,也可以获得相同的结果。一个问题是从数组中删除和添加颜色要容易得多,您可以在运行时执行此操作。如果您将其硬编码到扩展中,则无法在运行时修改它。
我说如果你有像颜色数组这样的多个常量,那么你可以继续使用Singleton类来实现这个目的。
如果您有大量的颜色,并且您需要存储所有颜色,则扩展程序可以正常工作。
如果您只有少量颜色,例如问题中的列表,或者如果您知道需要修改列表,那么数组就可以了。