2016-01-20 48 views
1

我见过需要参数,选择器的对象。理解选择器的一般概念是什么?swift中选择器的概念是什么?

选择选择器的一个例子是NSTimer,其中我选择的选择器是增加计数器的函数。

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: ("incrementCounter"), userInfo: nil, repeats: true) 

回答

3

选择器是Objective-C中的一个概念,它表示要在运行时动态发送的消息(即要调用的方法)。当你通过选择器设置一些东西时,你知道哪个消息将被发送,但不一定是它的参数。 (有时甚至不会将它发送到哪个对象)。

您可以考虑选择器是闭包/块的相对关系,因为它们允许您打包稍后调用的某些代码并将它交给其他某个函数。但是,必须在编译时指定/解析闭包,所以它不如选择器动态。

选择器对控制动作等“宽松绑定”概念非常有用。您可以使用选择器在Interface Builder中选择按钮在单击时应该调用哪种方法,即使您的应用程序实际上并未在IB中运行;或者你可以说“这个按钮应该在任何文本视图都有键盘焦点时调用paste:”,不知道你什么时候设置了哪个视图(因为键盘焦点总是在变化)。在历史上,选择器是告诉API事物的主要方式,比如“稍后调用这个方法”,这就是为什么你可以在整个Cocoa中找到它们,例如定时器,数组排序和即使这种模式可能因封闭/封闭的紧密结合而受益更多。

更多关于在夫特使用选择器,请参阅Interacting with Objective-C APIs使用夫特与可可和Objective-C和/或this SO answer。有关选择器和可可的更多信息,请参见Cocoa Core Competencies: Selector

2

selector是其在所指定的类由target当计时器触发称为自定义方法。如果方法应该带参数,则每个参数都用冒号表示。

在夫特的structSelector响应该协议StringLiteralConvertible
因此 - 因为编译器知道在您的示例的类型 - 一个文字串被隐式转换为Selector实例,不需要Selector初始化。

PS:选择器字符串周围的圆括号也不需要。