更新: 今天(2016年3月23日)Swift正式发布2.2 已经添加了#selector辅助语法, 不用纠结字符串的事儿了.
OC中的@selector对应到Swift里是Selector对象
Selector对象是通过字符串来初始化的,没法像OC那样具备语法检测的机制,因此字符串的形式就需要十分注意了
- 无参数的形式:
func test1()
Selector("test1")
- 一个参数的情况
func test2(arg: NSNumber)
Selector("test2:")
- 一个参数,并且是带参数名的情况:
func test3(arg arg: NSNumber)
Selector("test3WithArg:")
注意: 这里使用了一个很特别的"With"的形式, 其实这和OC里的习惯用法是类似的
对于函数test3, 我们在OC的习惯写法是这样的:
- (void) test3WithArg:(NSNumber)arg {}
- 多个参数的形式
func test4(arg: NSNumber arg2: NSNumber)
Selector("test4:arg2:")
注意,如果第一个参数带了参数名,也是需要用With的形式.
另外,Selector有一个从字符串默认构造函数,因此在performSelector等方法需要传递Selector类型对象的情况下,可以直接传递字符串参数