Selector
我个人在学习新事物的时候,通常会这么挑战自己:我有没有办法用一句话描述这件事物是什么?还有,这件事物可以用在哪里?我用这种挑战,确认自己是否完全理解我想要学习的事物。
我们在接下来的章节中,也会以这样的方式展开。其实这种作法,也就是苹果的叙事风格,比方说,当我们去看WWDC 2015影片,苹果在讲什么是Localization的时候1,Localization的简短定义就是「让你的App说你的顾客的语言」 (Making your app speak your customer's language),从这么简短的话中,我们就可以得到可以继续发挥的关键字:1. 「你的顾客的语言」,全世界各国的语言,到底有什么幽微的不同?2. 「Making」,我们该怎么做?有什么技术的细节?—于是,我们继续一步一步发展出完整的故事。
在台湾,当我们问一位iOS 工程师「什么是delegate」这样的问题时,得到的答案可能是「delegate 就是『代理』」,至于代理了什么、为什么要代理,却又说不上来。我们在KKBOX 对自己的要求并不只如此。
以我们现在要讨论的Selector 来说,可以做这样一个简短的定义:
Selector 就是用字串表示某个物件的某个method
用更术语的说法会是:
Selector 就是Objective-C 的virtual table 中指向实际执行function pointer 的一个C 字符串
那,Selector 有什么用呢?
因为method 可以用字符串表示,因此,某个method 就可以变成可以用来传递的参数。
至于要更进一步了解Selector,我们就要从一些更基本的事情开始讲起: Objective-C 里头的物件以及Class,到底是什么?
1 . WWDC 2015 What's New in Internationalization https://developer.apple.com/videos/wwdc/2015/?id=227 ,2:30左右 ↩