在Swift中覆盖CALayer的initWithLayer

时间:2014-09-23 15:31:16

标签: ios objective-c swift calayer

我正在学习如何使用CALayers并对其属性执行动画。对于初学者来说,Apple的文档简直是神秘的。我设法在iOS的文档中找到了一个示例(称为:CustomAnimatableProperty),其中有些解释了'怎么做我想要的:

// For CALayer subclasses, always support initWithLayer: by copying over custom properties.
-(id)initWithLayer:(id)layer {
    if( ( self = [super initWithLayer:layer] ) ) {
        if ([layer isKindOfClass:[BulbLayer class]]) {
            self.brightness = ((BulbLayer*)layer).brightness;
        }
    }
    return self;
}

将方法覆盖转换为Swift会给我一些错误: enter image description here

错误源于我对这里发生的事情缺乏了解。我不确定我们在那些嵌套的if语句中检查了什么。我对#34; ="的使用感到有点困惑。在主if(){}块中。我们不应该检查(" ==")是否相等?

但是,任何一般帮助都意味着世界。我曾尝试在线审核一些博客文章/教程,但不会讨论这个特定的问题。

1 个答案:

答案 0 :(得分:7)

self = [super init...]成语是针对Objective-C的,而不是Swift。在Swift中,init块不是正常功能,也不会返回任何内容。

在我们处理它的同时,让我们使用Swift成语进行向下转换。我们还需要保证在我们致电size之前初始化super.init

override init(layer: AnyObject!) {
    if let layer = layer as? SegmentActiveLayer {
        size = layer.size
    } else {
        size = 0
    }
    super.init(layer: layer)
}