Как стать автором
Обновить

CSS для Swift: использование стилей для любых подклассов UIView

Время на прочтение 5 мин
Количество просмотров 8.7K
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 3

Комментарии 3

Есть решения которые позволяют стилизовать даже без написания функций под каждый стиль.
Например в SKStyleKit используется описание стилей в виде JSON файла и в общем случае кода не приходится писать вообще.
Спасибо за публикацию, подход очень интересный! Сегодня же попробую!
Вы использовали анимированное применение стилей? Поделитесь примером?
Попробовал ваш подход. Идея понравилась, но… допустим я хочу применить для какого-то лейбла UIViewStyle&#60UIView&#62 и UIViewStyle&#60UILabel&#62. И у меня это не заработало. Вот пример, на который жалуется компилятор:

var style1: UIViewStyle<UIView>!
var style2: UIViewStyle<UILabel>!
var style3: UIViewStyle = .compose(style1, style2)

Поэтому, я предполагаю, что вы объединяли между собой только стили одного типа. Хотя, использование typealias, который вы привели в начале публикации, мог бы справиться с задачей совмещения стилей класса и стилей родителей класса.

typealias UIViewStyle<T: UIView> = (T)-> Void

В итоге у меня получилось использовать стили вот таким образом:

let view = UILabel()
view.decorator[UIView.backgroundColor(), UILabel.textSubtitle()]
return view

Где стили, например, обернуты в static функции класса:

extension UIView {
    
    static func backgroundColor() -> (UIView) -> () {
        return { (view: UIView) -> () in
            view.backgroundColor = UIColor.orange
        }
    }
}

extension UILabel {
    
    static func textNormal() -> (UILabel) -> () {
        return { (view: UILabel) -> () in
            view.numberOfLines = 1
            view.textColor = UIColor.blue
            view.textAlignment = .left
            view.lineBreakMode = .byTruncatingMiddle
            view.font = UIFont.systemFont(ofSize: 16.0)
        }
    }
}
Зарегистрируйтесь на Хабре , чтобы оставить комментарий