Быстрое расширение UIColor с доступом к классу из Objective-C

Как я могу получить доступ к своему темно-серому цвету из объектива-c, пожалуйста?

@objc
extension UIColor
{
    @objc
    public class Scheme1: NSObject {
        static var darkGray: UIColor! {
            return UIColor(red: 16.0/255.0, green: 16.0/255.0, blue: 19.0/255.0, alpha: 1.0)
        }
    }
}

1 ответ

Решение

Предполагая, что вы используете Swift 4 @objc умозаключение, darkGray должен быть объявлен @objc:

@objc
extension UIColor
{
    @objc
    public class Scheme1: NSObject {
        @objc static var darkGray: UIColor! {
            return UIColor(red: 16.0/255.0, green: 16.0/255.0, blue: 19.0/255.0, alpha: 1.0)
        }
    }
}

Вы можете получить доступ darkGray из Objective-C с помощью Scheme1.darkGray, Objective-C не поддерживает вложенные классы, поэтому Scheme1 экспортируется на верхнем уровне.


Если вы действительно хотите получить доступ Scheme1 в пространстве имен даже из Objective-C, вы можете сделать darkGray свойство экземпляра и хранить экземпляр Scheme1 в вашем расширении:

@objc
extension UIColor
{
    @objc
    public class Scheme1: NSObject {
        @objc var darkGray: UIColor! {
            return UIColor(red: 16.0/255.0, green: 16.0/255.0, blue: 19.0/255.0, alpha: 1.0)
        }
    }

    @objc public static var scheme1 = Scheme1()
}

Вы можете получить доступ darkGray с помощью UIColor.scheme1.darkGray,

Другие вопросы по тегам