Есть ли решение иметь значение по умолчанию для структуры - PullRequest
0 голосов
/ 04 августа 2020

Я объясняю себя:

Я расширяю UIColor следующим образом:

struct MyColors {

        struct blue {
            static let light = UIColor(netHex: 0x6ABB72)
            static let normal = UIColor(netHex: 0x6ABB72)
            static let dark = UIColor(netHex: 0x6ABB72)
        }
    }

есть ли решение сделать UIColor.MyColors.blue для UIColor.MyColors.blue.normal?

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Если вы хотите адаптировать свое приложение для светлого и темного режима, вы даже можете сделать следующее: Go в папку Assets-Folder -> Нажмите кнопку с плюсом в нижнем левом углу -> Выберите «New Color Set» -> Затем go в инспекторе и установите для параметра Appearances значение «Any, Light, Dark» - > Установите цвет для каждого внешнего вида. Затем вы можете использовать такой цвет:

UIColor(named: <Name of your Color Set>)

0 голосов
/ 04 августа 2020

Вы можете расширить UIColor с помощью свойства stati c, хранящего тип MyColors.

extension UIColor {
    static let myColors = MyColors.self
}

, а затем получить доступ к таким цветам, как

UIColor.myColors.blue.light

Или вы можете фактически объявить MyColors в пространстве имен UIColor, например

extension UIColor {
    struct MyColors {
        struct Blue {
            static let light = ...

, а затем получить к ним доступ следующим образом: UIColor.MyColors.Blue.light

0 голосов
/ 04 августа 2020

Чтобы приблизиться к тому, что вы хотите сделать, рассмотрите возможность использования функции для возврата цвета с заданным оттенком, а затем используйте аргументы по умолчанию, например:

extension UIColor {
    enum MyColor {
        case blue

        enum Shade { case normal, light, dark }

        func shade(_ shade: Shade) -> UIColor {
            switch self {
            case .blue:
                switch shade {
                case .normal: return .init(netHex: 0x000099)
                case .light:  return .init(netHex: 0x0066cc)
                case .dark:   return .init(netHex: 0x000066)
                }
            }
        }
    }

    static func my(_ color: MyColor, shade: MyColor.Shade = .normal) -> UIColor {
        return color.shade(shade)
    }
}

Синтаксис для использования будет немного другим:

let myBlue = UIColor.my(.blue)

В качестве бонуса вы можете добавить их к MyColor:

        var normal: UIColor { shade(.normal) }
        var light: UIColor { shade(.light) }
        var dark: UIColor { shade(.dark) }

Затем вы можете сделать UIColor.MyColor.blue.dark, как раньше.

Однако , вместо этого я бы предложил просто добавить сами цвета как UIColor расширения:

extension UIColor {
    static let myBlue = UIColor(named: "blue")
    static let myLightBlue = UIColor(named: "lightBlue")
    static let myDarkBlue = UIColor(named: "darkBlue")
}

Это даже позволяет вам использовать сокращение, например:

label.textColor = .myBlue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...