我开始参加斯坦福大学关于itunes的iOS编程课程的第二讲,并对上述陈述的确切含义感到困惑。这是幻灯片和演讲本身: '方法的参数(比如atTop:参数)绝不是可选的'。
以下是讲师提到的示例方法,他说论据永远不是可选的':
- (void)addCard:(Card *)card atTop:(BOOL)atTop;
他继续说,如果你想要一个没有addTop的addCard:方法:我们可以单独定义它':
如同,
- (void)addCard:(Card *)card;
我对他的意思感到困惑。我一直认为方法论证总是可选的,但我想我错过了一些明显的东西。他是否只是意味着在这种情况下你不能离开顶部:只是挂在那里,因为它与第一种方法相关联?
有人可以帮忙吗?感谢。
答案 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];
您没有提供所有参数,因此您没有向定义的方法发送消息,而是将其发送到未定义的内容。
但是如果你定义的方法只接受那个参数,那么它当然可以工作。