"方法的参数绝不是可选的"?

时间:2014-11-25 21:26:31

标签: ios objective-c

我开始参加斯坦福大学关于itunes的iOS编程课程的第二讲,并对上述陈述的确切含义感到困惑。这是幻灯片和演讲本身: '方法的参数(比如atTop:参数)绝不是可选的'。

以下是讲师提到的示例方法,他说论据永远不是可选的':

- (void)addCard:(Card *)card atTop:(BOOL)atTop;

他继续说,如果你想要一个没有addTop的addCard:方法:我们可以单独定义它':

如同,

- (void)addCard:(Card *)card;

我对他的意思感到困惑。我一直认为方法论证总是可选的,但我想我错过了一些明显的东西。他是否只是意味着在这种情况下你不能离开顶部:只是挂在那里,因为它与第一种方法相关联?

有人可以帮忙吗?感谢。

3 个答案:

答案 0 :(得分:6)

Objective C方法签名是一种独特的野兽。在

的情况下
- (void)addCard:(Card *)card atTop:(BOOL)atTop;

实际的函数签名是addCard:atTop:,这意味着addCard:将无法识别,因为它未被定义(除非您已在其他地方明确定义)。也就是说,您总是可以通过nil代替任何指针参数,但在这种情况下这不起作用,因为BOOL是原始的。

答案 1 :(得分:1)

Objective-C方法(或选择器)在整个名称中定义,在您的情况下:

-(void)addCard:(Card *)card atTop:(BOOL)atTop;

is this name: addCard:atTop:

And 

-(void)addCard:(Card *)card;

is: addCard:

虽然第二种方法的实施可能是:

,但仍存在不同的方法
 -(void)addCard:(Card *)card
 {
  [self addCard:card atTop:NO];
 }

但是有不同的方法(选择器)。

答案 2 :(得分:0)

是的,如果你有类似的方法,他会说:

- (void)playSport:(Sport*)s onField:(Field*) atTime:(NSDate)when;

您无法致电:

[object playSport: sport];

您没有提供所有参数,因此您没有向定义的方法发送消息,而是将其发送到未定义的内容。

但是如果你定义的方法只接受那个参数,那么它当然可以工作。