Swift - 使用valueForUndefinedKey错误获取名称崩溃的属性

时间:2017-07-27 16:13:59

标签: ios swift

我有UIView扩展,我想用它来添加渐变层。 我知道我无法在扩展中创建类型为CAGradientLayer(或任何其他类型...)的存储属性,因此我想在UIView本身中创建gradientLayer属性(扩展中没有)和而不是检查扩展是否存在此属性。 所以我要求:

extension UIView
{
    private var gradientLayer:CAGradientLayer?
    {
        return value(forKey: "gradientLayer") as? CAGradientLayer
    }

    func addGradient()
    {
        guard gradientLayer != nil else
        {
            return
        }

        // do something with the layer
        }
}

当此属性存在时,一切正常,但是否则应用程序崩溃并显示错误:

  

valueForUndefinedKey:]:此类不符合键值编码   对于梯度梯度层。

是否可以在不崩溃应用程序的情况下以这种方式知道属性是否存在?

1 个答案:

答案 0 :(得分:1)

子类UIView并实现valueForUndefinedKey:,以便它可以执行除崩溃之外的其他操作。

但是,我会采用完全不同的方式;我将额外的信息存储在视图的中。图层可以在任何键下存储信息,如果您询问不存在的密钥,则不会崩溃。