【问题标题】:Create a class of Colors创建一个颜色类
【发布时间】:2019-11-05 17:23:47
【问题描述】:

在我的应用程序中,我为不同的任务提供了例如 5 种可用颜色,用户可以随时在它们之间进行选择。我认为拥有一个颜色类会很好,我在类中声明了一些颜色,在任何控制器中我都可以将这些颜色作为数组访问。例如,当我想显示要拾取的颜色时,我希望它们作为一个数组。但我不知道该怎么做?我创建了一个类,但在初始化部分,我不知道如何添加颜色

final class Colors {
    var color : [UIColor]

    init(color: [UIColor]) {

    }
}

您的帮助将不胜感激。

【问题讨论】:

  • 考虑使用资产

标签: swift uicolor


【解决方案1】:

扩展 UIColor,使您的颜色成为静态属性,并使您的数组成为计算的静态属性。

【讨论】:

    【解决方案2】:

    选项 1 - 您可以扩展 UIColor 以列出所有颜色并创建一个数组:

    extension UIColor {
        struct GoTimeThemes {
            static let firstColor = UIColor(red: 48.0/255.0, green: 35.0/255.0, blue: 174.0/255.0, alpha: 1.0)
            static let secondColor = UIColor(red: 83.0/255.0, green: 160.0/255.0, blue: 263.0/255.0, alpha: 1.0)
            static let thirdColor = UIColor(red: 146.0/255.0, green: 80.0/255.0, blue: 156.0/255.0, alpha: 1.0)
    
            static var allColors: [UIColor] {
            let colors = [firstColor, secondColor, thirdColor]
            return colors
            }
        }
    }
    

    然后像这样调用你的数组

    let colors = UIColor.GoTimeThemes.allColors
    

    选项 2 - 您可以将颜色放入符合 CaseIterable 的 Enum 中:

    enum ThemeColors: CaseIterable {
        case firstTheme, secondTheme, thirdTheme
    
        var color: UIColor {
            switch self {
            case .firstTheme:
                return UIColor(red: 48.0/255.0, green: 35.0/255.0, blue: 174.0/255.0, alpha: 1.0)
            case .secondTheme:
                return UIColor(red: 83.0/255.0, green: 160.0/255.0, blue: 263.0/255.0, alpha: 1.0)
            case .thirdTheme:
                return UIColor(red: 146.0/255.0, green: 80.0/255.0, blue: 156.0/255.0, alpha: 1.0)
            }
        }
    }
    

    并使用allCases 调用它以获取集合:

    ThemeColors.allcases //→ [firstTheme, secondTheme, thirdTheme]
    

    【讨论】:

      【解决方案3】:

      我认为拥有一个颜色类会很好,我在该类中声明了一些颜色,在任何控制器中我都可以将这些颜色作为数组访问。

      枚举可以很好地解决这个问题。颜色是固定的,对吧?听起来您不需要一组颜色的不同实例,并且能够访问颜色而无需创建对象或打扰共享对象可能会很好。枚举为您提供一组离散值,并且它可以具有与之关联的方法。例如,您可以有一个 darkGreen 值,然后像 uiColor()cgColor() 这样的方法返回与该值对应的 UIColorCGColor 对象。

      【讨论】:

      • 我考虑过枚举,但是如何随时将该枚举转换为数组?感谢您的帮助
      • 使枚举​​符合CaseIterable 协议,然后您可以访问.allCases 属性,该属性将是所有可能值的数组。
      猜你喜欢
      • 2013-10-24
      • 2020-06-14
      • 1970-01-01
      • 2017-05-04
      • 2012-01-16
      • 2022-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多