Создать класс цветов - PullRequest
0 голосов
/ 05 ноября 2019

В моем приложении, например, у меня есть 5 доступных цветов для разных задач, которые пользователь может выбрать между ними в любое время. Я подумал, что было бы хорошо иметь класс цветов, и я объявляю несколько цветов внутри класса, чтобы в любом контроллере я мог получить доступ к этим цветам в виде массива. Например, когда я хочу показать цвета для пикапа, я хочу, чтобы они были в виде массива. Но я не знаю, как это сделать? Я создаю класс, но в начальной части я не знаю, как добавить цвета

final class Colors {
    var color : [UIColor]

    init(color: [UIColor]) {

    }
}

Ваша помощь будет оценена по достоинству.

Ответы [ 3 ]

4 голосов
/ 05 ноября 2019

Расширьте UIColor, сделайте ваши цвета статическими свойствами и сделайте ваш массив вычисленным статическим свойством.

1 голос
/ 05 ноября 2019

Опция 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 - Вы можете поместить свои цвета в Enum, который соответствует CaseIterable:

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]
0 голосов
/ 05 ноября 2019

Я думал, что было бы хорошо иметь класс цветов, и я объявляю несколько цветов внутри класса, чтобы в любом контроллере я мог получить доступ к этим цветам в виде массива.

Anперечисление будет хорошо работать для этого. Набор цветов фиксирован, верно? Похоже, вам не понадобятся отдельные экземпляры набора цветов, и было бы неплохо иметь возможность доступа к цветам без необходимости создавать объект или беспокоиться о совместном использовании объекта. Перечисление дает вам набор дискретных значений и может иметь методы, связанные с ним. Например, у вас может быть значение darkGreen, а затем такие методы, как uiColor() и cgColor(), которые возвращают UIColor и CGColor объекты, соответствующие этому значению.

...