How do you override layerClass in swift

Swift

Swift Problem Overview


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 Solutions


Solution 1 - Swift

Adapted from Apple's [ListerKit][1] sample code:

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

Update for Swift 3:

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

[1]: https://developer.apple.com/library/ios/samplecode/Lister/Introduction/Intro.html#//apple_ref/doc/uid/TP40014701-Intro-DontLinkElementID_2 "ListerKit"

Solution 2 - Swift

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

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

Solution 3 - Swift

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

Solution 4 - Swift

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
    }
    
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionchunkyguyView Question on Stackoverflow
Solution 1 - SwiftDavid AndersonView Answer on Stackoverflow
Solution 2 - SwiftsavinolaView Answer on Stackoverflow
Solution 3 - SwiftConnorView Answer on Stackoverflow
Solution 4 - SwifthfossliView Answer on Stackoverflow