2017-07-27 100 views
0

我有用于添加渐变图层的UIView扩展。 我知道我无法在扩展中创建类型CAGradientLayer(或任何其他类型...)的存储属性,所以我想在UIView本身中创建gradientLayer属性(在扩展中为no)并检查如果该属性存在,则在扩展中。 于是我问:Swift - 通过名称获取属性crashForUndefinedKey错误

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:]: this class is not key value coding-compliant for the key gradientLayer.

是否有可能知道这个属性这样没有崩溃存在应用程序?

+1

添加一些截图以了解更多关于此问题的信息 –

回答

1

子类UIView和执行valueForUndefinedKey:,以便它做一些事情而不是崩溃。

但是,我会用完全不同的方式去讨论这个问题。我会在视图的中存储额外的信息。一个图层可以存储任何密钥下的信息,并且如果询问不存在的密钥,则不会崩溃。