Comments 3
Есть решения которые позволяют стилизовать даже без написания функций под каждый стиль.
Например в SKStyleKit используется описание стилей в виде JSON файла и в общем случае кода не приходится писать вообще.
Например в SKStyleKit используется описание стилей в виде JSON файла и в общем случае кода не приходится писать вообще.
Спасибо за публикацию, подход очень интересный! Сегодня же попробую!
Вы использовали анимированное применение стилей? Поделитесь примером?
Вы использовали анимированное применение стилей? Поделитесь примером?
Попробовал ваш подход. Идея понравилась, но… допустим я хочу применить для какого-то лейбла UIViewStyle<UIView> и UIViewStyle<UILabel>. И у меня это не заработало. Вот пример, на который жалуется компилятор:
Поэтому, я предполагаю, что вы объединяли между собой только стили одного типа. Хотя, использование typealias, который вы привели в начале публикации, мог бы справиться с задачей совмещения стилей класса и стилей родителей класса.
В итоге у меня получилось использовать стили вот таким образом:
Где стили, например, обернуты в static функции класса:
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)
}
}
}
Sign up to leave a comment.
CSS для Swift: использование стилей для любых подклассов UIView