Доступ к статическим переменным в структуре в расширении класса по ключу с использованием строк - PullRequest
0 голосов
/ 08 апреля 2019

Цель состоит в том, чтобы получить доступ к статической переменной в структуре в расширении класса:

extension UIColor {
    struct MyColors {
        static var happy: UIColor {
            return UIColor(hexString: "#FFB100")!
        }
        static var superHappy: UIColor {
            return UIColor(hexString: "#FFB101")!
        }

        static func withName(_ name: String = "") -> UIColor? {
            return UIColor.value(forKey: name) as? UIColor
        }
    }
}

// Produces error "this class is not key value coding-compliant for the key happy."
let myHappyColor = UIColor.MyColors.withName("happy")

Можем ли мы сделать что-то подобное в PHP ?

<?php
$prop = 'Name';
echo $obj->$prop;

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Вы можете создать Набор цветов в каталоге xcassets с некоторым именем. Затем вы можете инициализировать цвет из этого набора с помощью разработанного инициализатора

UIColor(named: "Name")

В любом случае, в Swift вы должны избегать инициализации объектов с идентификаторами (я говорю не об именованных наборах, а о вашем текущем подходе). Swift - это язык безопасного типа. Попробуйте соблюдать правила языка безопасного типа.

0 голосов
/ 08 апреля 2019

Вы можете использовать статические переменные или перечисление:

extension UIColor {

    // MARK: - Static

    static let myColor = UIColor(/* setup */)

или

enum MyColors {
case red

var color: UIColor {
switch self {
case .red:
return .red
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...