通过使用字符串的键来访问类扩展中struct中的静态变量

时间:2019-04-08 12:00:39

标签: swift

目标是在类扩展的结构中访问静态变量:

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 :(得分:0)

您可以使用静态变量或枚举:

extension UIColor {

    // MARK: - Static

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

enum MyColors {
case red

var color: UIColor {
switch self {
case .red:
return .red
}
}

答案 1 :(得分:0)

您可以在xcassets目录中使用某些名称创建颜色设置。然后,您可以使用设计的初始化器来初始化此设置中的颜色

UIColor(named: "Name")

无论如何,在Swift中,您应该避免使用标识符初始化对象(我不是在谈论命名集,而是在谈论您当前的方法)。 Swift是安全类型的语言。尝试遵守安全类型语言的规则。