How do you override layerClass in swift
SwiftSwift 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
}
}