在Objective-C中,我们使用这样做
+ (Class)layerClass
{
return [CAEAGLLayer class];
}
显然这不起作用:
CAEAGLLayer.class()
因为class
是Swift中的关键字。你是如何在Swift中做到的?
答案 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
}
}