你如何在swift中覆盖layerClass

时间:2014-06-22 12:14:16

标签: swift

在Objective-C中,我们使用这样做

+ (Class)layerClass
{
    return [CAEAGLLayer class];
}

显然这不起作用:

CAEAGLLayer.class()

因为class是Swift中的关键字。你是如何在Swift中做到的?

4 个答案:

答案 0 :(得分:96)

改编自Apple的ListerKit示例代码:

override class func layerClass() -> AnyClass {
    return CAEAGLLayer.self
}

Swift 3更新:

override class var layerClass: AnyClass {
    get {
        return CAGradientLayer.self
    }
}

答案 1 :(得分:28)

在iOS 10中,这是一个计算属性而不是方法:

override class var layerClass: AnyClass {
    get {
        return CAEAGLLayer.self
    }
}

答案 2 :(得分:4)

Swift与Objective-C的内省方式截然不同。您可能需要查看有关Metatypes的文档。

对于您的情况,我尝试:CAEAGLLayer.self

答案 3 :(得分:1)

它可以像这样写成

import UIKit

class GradientView: UIView {

    override final class var layerClass: AnyClass {
        return CAGradientLayer.self
    }
}

额外提示:也许你想要一个类型安全的吸气剂到图层?然后你可以写

import UIKit

class GradientView: UIView {

    override final class var layerClass: AnyClass {
        return CAGradientLayer.self
    }

    override var layer: CAGradientLayer {
        return super.layer as! CAGradientLayer
    }

}