还是这样……
在编程中,通常有很多不同的方法可以达到相同的目的。 我在上一篇文章(“功能性” Swift#6:视图样式)中提出了一些想法。 以下是解决同一问题(设计视图样式)的其他10种变化。 有些只是其他的小变体,这是为了演示Swift语言功能或模式。
在本文中,我将不加评论或推荐地介绍这些内容。 它们都是实现相同结果的有效方法,每种方法都有其位置。
- 逐行
让myBtn = UIButton()
myBtn.backgroundColor = .red
myBtn.frame = CGRect(x:10,y:10,宽度:30,高度:30)
myBtn.isUserInteractionEnabled = true
2.子类(和变体-通过参数/样式方法/ layoutSubviews覆盖样式等传递样式)
类MyButton:UIButton
{
覆盖init()
{
super.init()
self.backgroundColor = .red
self.frame = CGRect(x:10,y:10,宽度:30,高度:30)
self.isUserInteractionEnabled = true
}
}
让myBtn = MyButton()
3.使用(例如:使用然后)
让myBtn = UIButton()。with {
$ 0.backgroundColor = .red
$ 0.frame = CGRect(x:10,y:10,宽度:30,高度:30)
$ 0.isUserInteractionEnabled = true
}
4.功能
功能样式(视图:UIView,颜色:UIColor,框架:CGRect,已启用:Bool)
{
view.backgroundColor =颜色
view.frame =框架
view.isUserInteractionEnabled =启用
}
5.适用
typealias样式=(UIView)->无效
func样式(颜色:UIColor,框架:CGRect,已启用:Bool)->样式
{
返回{
$ 0.backgroundColor =颜色
$ 0.frame =框架
$ 0.isUserInteractionEnabled =启用
}
}
让myBtn = UIButton()
样式(myBtn)
6.可通过数组申请
typealias样式=(UIView)->无效
func array(_样式:[样式])->样式
{
返回{查看
用于样式{
风格(查看)
}
}
}
func样式(颜色:UIColor,框架:CGRect,已启用:Bool)->样式
{
返回数组([{$ 0.backgroundColor = color},
{$ 0.frame = frame},
{$ 0.isUserInteractionEnabled =启用}])
}
让myBtn = UIButton()
样式(myBtn)
7.适用于可变参数
typealias样式=(UIView)->无效
func variadic(_样式:样式...)->样式
{
返回{查看
用于样式{
风格(查看)
}
}
}
func样式(颜色:UIColor,框架:CGRect,已启用:Bool)->样式
{
返回数组({$ 0.backgroundColor = color},
{$ 0.frame = frame},
{$ 0.isUserInteractionEnabled =已启用})
}
让myBtn = UIButton()
样式(myBtn)
8.中缀应用运算符
typealias样式=(UIView)->无效
优先组ForwardApplication
{
关联性:左
高于:AssignmentPrecedence
}
中缀运算符:ForwardApplication
func (a:A,f:(A)-> Void)-> A
{
F A); 返回一个
}
func样式(颜色:UIColor,框架:CGRect,已启用:Bool)->样式
{
返回{
$ 0 {$ 0.backgroundColor = color}
{$ 0.frame =框架}
{$ 0.isUserInteractionEnabled =已启用}
返回
}
}
让myBtn = UIButton() style(color:.red,
框架:CGRect(x:...),
已启用:true)
9.中缀应用运算符(内联)
typealias样式=(UIView)->无效
优先组ForwardApplication
{
关联性:左
高于:AssignmentPrecedence
}
中缀运算符:ForwardApplication
func (a:A,f:(A)-> Void)-> A
{
F A); 返回一个
}
让myBtn = UIButton() {$ 0.backgroundColor = .red}
{$ 0.frame = CGRect(x:...)}
{$ 0.isUserInteractionEnabled = true}
10.组合(预定义的样式选项,更通用)
typealias样式=(UIView)->无效
优先组ForwardApplication
{
关联性:左
高于:AssignmentPrecedence
}
中缀运算符:ForwardApplication
func (a:A,f:(A)->无效)-> A
{
F A); 返回一个
}
函数样式(颜色:UIColor,框架:CGRect,启用:布尔)->样式
{
返回{
$ 0 {$ 0.backgroundColor = color}
{$ 0.frame =框架}
{$ 0.isUserInteractionEnabled =已启用}
返回
}
}
让style1:样式= {
返回样式(color:.blue,frame:CGRect(x:...),enabled:true)
}
让myBtn = UIButton() style1