Подтвердить что ты не робот

Как вы переопределяете layerClass в swift

В Objective-C мы используем это как

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

Очевидно, что это не сработает:

CAEAGLLayer.class()

Потому что class - это ключевое слово в Swift. Как вы это делаете в Swift?

4b9b3361

Ответ 1

Адаптировано из Apple ListerKit пример кода:

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

Обновление для Swift 3:

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

Ответ 2

В iOS 10 это вычисленное свойство вместо метода:

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

Ответ 3

Swift делает интроспекцию гораздо иначе, чем Objective-C. Вы можете взглянуть на документы о Метатипы.

В вашем случае я бы попробовал: CAEAGLLayer.self

Ответ 4

Это можно записать так:

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
    }

}