How do you override layerClass in swift

2020-05-24 18:57发布

In Objective-C we use to do it like this

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

Obviously this won't work:

CAEAGLLayer.class()

Because class is a keyword in Swift. How do you do it in Swift?

标签: swift
4条回答
Explosion°爆炸
2楼-- · 2020-05-24 19:32

Swift does introspection much differently than Objective-C. You may want to take a look at the docs about Metatypes.

For your case I'd try: CAEAGLLayer.self

查看更多
淡お忘
3楼-- · 2020-05-24 19:37

Adapted from Apple's ListerKit sample code:

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

Update for Swift 3:

override class var layerClass: AnyClass {
    get {
        return CAGradientLayer.self
    }
}
查看更多
爷的心禁止访问
4楼-- · 2020-05-24 19:39

It can be written like this

import UIKit

class GradientView: UIView {

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

Bonus tip: Maybe you would like to have a type safe getter to the layer? Then you can write

import UIKit

class GradientView: UIView {

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

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

}
查看更多
放荡不羁爱自由
5楼-- · 2020-05-24 19:53

In iOS 10, this is a calculated property instead of a method:

override class var layerClass: AnyClass {
    get {
        return CAEAGLLayer.self
    }
}
查看更多
登录 后发表回答