Calling selectors with parameters 调用带参数的选择器
你应该已经学会了如何从一个方法里面返回字典,它和在 Swift 里返回元组是差不多的。
那还有一件你需要知道的事情就是,你可以用同样的方法去使用选择器,我们看一看之前使用 performSelector 的例子:
[person performSelector:@selector(printGreeting)];
这段代码它的意思是,找到这个叫做 printGreeting 的方法,然后运行它。
在这个方法没有参数的时候,这行代码运行起来完全没有问题。但是如果有参数了会怎么样呢?也就是说,当我们把方法写成这样的时候:
- (void)printGreeting:(NSString*)greeting;
我们就要这样来调用我们的方法了:
[person performSelector:@selector(printGreeting:)
withObject:@"Taylor"];
我们要在 printGreeting 后面加一个冒号,来告诉我们的选择器,后面有要用到的参数。
那我们之前的 printGreetingTo:atTimeOfDay: 方法,带上参数之后是这么写的,你要在参数前面加上 withObject:
- (void)printGreetingTo:(NSString*)name atTimeOfDay:(NSString*)time;
当我们要用选择器来调用它的时候,就要写成这个样子:
- (void)printGreetingTo:(NSString*)name atTimeOfDay:(NSString*)time;
我们来想象一下,假设有一个方法,它有五个参数!你真的想要写 withObject 写五遍吗?(¯﹃¯)
真的没有人想要这样子写代码的……
好在 Objective-C 没有这样的方法……
那万一万一,真的有这种情况,你可以把你的参数打包在一个字典里面,然后把这个字典传进方法来用。