这篇博客发布的有点晚,最近项目中使用了Swift3.0,发现Selectors又有新的变化,决定更新一下博客
Selectors
之前有学习过Swift,但是项目中一直没有使用,所以好长时间没有接触了,最近时间比较多,打算使用Swift仿一款APP.在使用过程中发现了一些语法的变化,特此记录下来
在之前的版本中, selector直接传入字符串,并且没有自动补全功能
let button = UIButton(type: .Custom)
button.addTarget(self, action: "buttonClick:", forControlEvents: .TouchUpInside)
func buttonClick(sender: UIButton) {}
但是现在如果还是这么写的话,就会有警告,如下:
然后就在SwiftGG中发现Swift:Selector 语法糖这篇博客,在里面做了详细的说明.
[转]在Swift中的优化
button.addTarget(self, action: #selector(XNHomeController.buttonClick(_:)), forControlEvents: .TouchUpInside)
在浏览代码的时候,上面这句代码简直不忍直视,太长,可读性也很差.
让我们来整合一下这些 selector,这样需要时可以直接引用,并且可以在同一个地方修改。
整合方式一
private struct Action {
static let buttonClick = #selector(XNHomeController.buttonClick(_:))
}
button.addTarget(self, action: Action.buttonClick, forControlEvents: .TouchUpInside)
整合方式二
private extension Selector {
static let buttonClick = #selector(XNHomeController.buttonClick(_:))
}
button.addTarget(self, action: Selector.buttonClick, forControlEvents: .TouchUpInside)
示例代码
Swift3.0的新写法
let button = UIButton(type: .Custom)
button.addTarget(self, action: #selector(bottomButtonClick), for: .touchUpInside)
func bottomButtonClick(sender: UIButton){ }