博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift中 Selector的使用
阅读量:7052 次
发布时间:2019-06-28

本文共 1697 字,大约阅读时间需要 5 分钟。

Selector 源自 Objective-C,例如 SEL 类型,以及 @selector() 方法选择器。

let btn  = UIButton.init(type:.custom)                btn.frame = CGRect.init(x: 40, y: 50, width: 40, height: 40);        btn.backgroundColor = UIColor.red                self.view.addSubview(btn)                btn.addTarget(self, action:Selector("leftAction"), for: .touchUpInside)复制代码

并定义方法

func leftAction() {            }复制代码

出现警告:No method declared with Objective-C selector 'leftAction',此时运行会崩溃。

这里是提示我们没有方法声明的Objective-C选择器

修改leftAction方法,添加@objc

@objc func leftAction() {            }复制代码

又出现警告:Use '#selector' instead of explicitly constructing a 'Selector' 点击fix警告消除,运行无误

btn.addTarget(self, action:#selector(HomeVC.leftAction), for: .touchUpInside)复制代码

这里添加HomeVC类名引用是为了强声明是当前类的方法,若当前作用域构造 Selector 的方法名唯一时,可以省略作用域,直接使用方法名。

然后我们试一下同名方法,传参不同的情况

定义方法

@objc    func leftAction(str:String) -> String {        return "123";    }复制代码

编译报错,提示我们当前类不能使用leftAction这个方法

去掉作用域编译,报错如下

然后我们将按钮的方法名修改为leftAction(btn:)

btn.addTarget(self, action:#selector(HomeVC.leftAction(btn:)), for: .touchUpInside)复制代码

程序可以正常运行,但是使用leftAction方法会报错。

原来还是参数不同的同名方法使用会有争议 处理方法:使用强制类型转换

let methodA = #selector(leftAction as () -> ())let methodB = #selector(leftAction(btn:) as (UIButton) ->String)复制代码

然后添加方法,

btn.addTarget(self, action:methodA, for: .touchUpInside);复制代码

使用调用标准库中的私有方法时,只能通过字符串Seletcor("") swift3.0之前继承方法可以用Selector("")来构造。swift4.0之后只能通过#selector()

配合 Swift 的 Extension,可以使用其管理当前控制器的所有 Selector:

fileprivate extension Selector{       static    let leftBtnClick = #selector(HomeVC.leftAction(btn:))    }复制代码

调用leftBtnClick

btn.addTarget(self, action:.leftBtnClick, for: .touchUpInside);复制代码

转载于:https://juejin.im/post/5a4f35dc51882573273968cb

你可能感兴趣的文章
关于Android SDK无法正常下载
查看>>
LVS-DR演示
查看>>
硬件要求
查看>>
基本数据类型
查看>>
我的友情链接
查看>>
设置cpu亲和性---即 绑定特定的进程线程到指定的cpu
查看>>
Java 的强引用、弱引用、软引用、虚引用
查看>>
zabbix性能简单调优
查看>>
CSS 详细解读定位属性 position 以及参数
查看>>
ed 命令 cat 命令
查看>>
想想你,幸福和快乐就来了
查看>>
html base标签 target=_parent使用介绍
查看>>
nginx实现反向代理,以反向代理tomcat为例
查看>>
团队项目冲刺5
查看>>
poj3254 Corn Fields(状压dp)
查看>>
方便记忆的电话号码
查看>>
+CIMG+彩色图片边缘提取实验记录_canny/hough transfrom
查看>>
BZOJ2179:FFT快速傅立叶(FFT)
查看>>
C#面向对象课程两大特性——封装、继承 12月23日
查看>>
Scala-基础-变量与常量
查看>>