swift中的选择器是什么概念?
What is the concept of selectors in swift?
我见过需要参数选择器的对象。理解选择器的一般概念是什么?
选择选择器的一个例子是 NSTimer,我选择的选择器是一个增加计数器的函数。
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: ("incrementCounter"), userInfo: nil, repeats: true)
A selector
是一个自定义方法,它在定时器触发时在 target
指定的 class 中调用。如果该方法应该采用参数,则每个参数都用冒号表示。
在 Swift 中 struct
Selector
响应协议 StringLiteralConvertible
,
因此——因为编译器知道你示例中的类型——文字字符串被隐式转换为 Selector
实例并且不需要 Selector
初始值设定项。
PS:您的选择器字符串两边的括号也不需要。
选择器是 Objective-C 中的一个概念,表示在 运行 时间动态发送的消息(即要调用的方法)。当您通过选择器设置要完成的操作时,您知道将发送哪条消息,但不一定知道其参数是什么。 (有时甚至不会发送到哪个对象。)
您可以将选择器视为 closures/blocks 的亲戚,因为它们可以让您打包一些稍后调用的代码并将其交给其他函数。但是,闭包在编译时必须是 specified/resolved,因此它不如选择器动态。
选择器非常适合 "loose binding" 控制操作等概念。您可以使用选择器在 Interface Builder 中选择按钮在单击时应调用的方法,即使您的应用程序实际上并未 运行ning 在 IB 中;或者你可以说 "this button should call paste:
on whatever text view has keyboard focus",不知道你什么时候设置按钮会是哪个视图(因为键盘焦点一直在变化)。
ObjC 中的选择器早于 blocks/closures,因此从历史上看,选择器是告诉 API 诸如 "call this method later" 之类的东西的主要方式,这就是为什么您在 Cocoa 用于计时器、数组排序和撤消等模式,即使此类模式可能会从 closures/blocks.
的紧密绑定中获益更多
有关在 Swift 中使用选择器的更多信息,请参阅 Interacting with Objective-C APIs in Using Swift with Cocoa and Objective-C and/or this SO answer. For more on selectors and Cocoa in general, see Cocoa Core Competencies: Selector。
我见过需要参数选择器的对象。理解选择器的一般概念是什么?
选择选择器的一个例子是 NSTimer,我选择的选择器是一个增加计数器的函数。
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: ("incrementCounter"), userInfo: nil, repeats: true)
A selector
是一个自定义方法,它在定时器触发时在 target
指定的 class 中调用。如果该方法应该采用参数,则每个参数都用冒号表示。
在 Swift 中 struct
Selector
响应协议 StringLiteralConvertible
,
因此——因为编译器知道你示例中的类型——文字字符串被隐式转换为 Selector
实例并且不需要 Selector
初始值设定项。
PS:您的选择器字符串两边的括号也不需要。
选择器是 Objective-C 中的一个概念,表示在 运行 时间动态发送的消息(即要调用的方法)。当您通过选择器设置要完成的操作时,您知道将发送哪条消息,但不一定知道其参数是什么。 (有时甚至不会发送到哪个对象。)
您可以将选择器视为 closures/blocks 的亲戚,因为它们可以让您打包一些稍后调用的代码并将其交给其他函数。但是,闭包在编译时必须是 specified/resolved,因此它不如选择器动态。
选择器非常适合 "loose binding" 控制操作等概念。您可以使用选择器在 Interface Builder 中选择按钮在单击时应调用的方法,即使您的应用程序实际上并未 运行ning 在 IB 中;或者你可以说 "this button should call paste:
on whatever text view has keyboard focus",不知道你什么时候设置按钮会是哪个视图(因为键盘焦点一直在变化)。
ObjC 中的选择器早于 blocks/closures,因此从历史上看,选择器是告诉 API 诸如 "call this method later" 之类的东西的主要方式,这就是为什么您在 Cocoa 用于计时器、数组排序和撤消等模式,即使此类模式可能会从 closures/blocks.
的紧密绑定中获益更多有关在 Swift 中使用选择器的更多信息,请参阅 Interacting with Objective-C APIs in Using Swift with Cocoa and Objective-C and/or this SO answer. For more on selectors and Cocoa in general, see Cocoa Core Competencies: Selector。