还是这样……

在编程中,通常有很多不同的方法可以达到相同的目的。 我在上一篇文章(“功能性” Swift#6:视图样式)中提出了一些想法。 以下是解决同一问题(设计视图样式)的其他10种变化。 有些只是其他的小变体,这是为了演示Swift语言功能或模式。

在本文中,我将不加评论或推荐地介绍这些内容。 它们都是实现相同结果的有效方法,每种方法都有其位置。

  1. 逐行
 让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