在数组中存储值与在Swift中创建扩展函数

时间:2017-05-10 15:22:51

标签: arrays swift uicolor swift-extensions

我在数组中存储了几个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)

这样做是否有任何意义,是否更好?

2 个答案:

答案 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类来实现这个目的。

如果您有大量的颜色,并且您需要存储所有颜色,则扩展程序可以正常工作。

如果您只有少量颜色,例如问题中的列表,或者如果您知道需要修改列表,那么数组就可以了。