Objective-C中的方法语法
有人能给我解释一下这个方法声明语法吗?在此函数中,将返回UIPickerView(iPhone上的老虎机UI)的行数。据我所知,该方法名为“Objective-C中的方法语法,objective-c,syntax,methods,Objective C,Syntax,Methods,有人能给我解释一下这个方法声明语法吗?在此函数中,将返回UIPickerView(iPhone上的老虎机UI)的行数。据我所知,该方法名为“pickerView”,并返回NSInteger 它传入一个指向UIPickerview的指针,名为“pickerView”。。。首先,为什么方法的名称与参数的名称相同 接下来是名为component的NSInteger参数,它告诉我们要为哪个组件计算行数。决定方法主体中的逻辑 什么是“行数组件”?它似乎描述了我们正在返回的价值,但是它在参数的中间。 - (
pickerView
”,并返回NSInteger
它传入一个指向UIPickerview的指针,名为“pickerView
”。。。首先,为什么方法的名称与参数的名称相同
接下来是名为component的NSInteger参数,它告诉我们要为哪个组件计算行数。决定方法主体中的逻辑
什么是“行数组件”
?它似乎描述了我们正在返回的价值,但是它在参数的中间。
- (NSInteger) pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
if (component == kStateComponent)
return [self.states count];
return[self.zips count];
}
在Objective-C中,方法的名称由声明中非参数和类型的所有部分组成。因此,此方法的名称为:
pickerView:numberOfRowsInComponent:
该方法相当于一个C型函数,如下所示:
编辑:(感谢):
Objective-C方法旨在自我记录,它们借鉴了Smalltalk的丰富传统 我将尝试解释这里的内容,
-(NSInteger)pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component
-(NSInteger)
第一部分指出这是一个返回NSInteger对象的Objective C实例。
(破折号)表示这是一个实例方法,其中-
表示这是一个类方法。括号中的第一个值是方法的返回类型+
pickerView:
此部分是消息名称的一部分。本例中的完整消息名是
。Objective-C运行时获取此方法信息并将其发送到指定的接收器。在纯C中,这看起来像pickerView:numberOfRowsInComponent:
。但是,由于这是Objective-C,因此额外的信息会打包到消息名称中NSInteger-pickerView(UIPickerView*pickerView,NSInteger组件)
(UIPickerView*)pickerView
此部分是输入的一部分。这里的输入类型为
,并且具有一个局部变量名pickerViewUIPickerView*
行数组件:
此部分是消息名称的第二部分。正如您在这里看到的,消息名称被拆分,以帮助指示您正在传递给接收者的信息。因此,如果我要用变量foo和bar向对象myObject发送消息,我会键入:
[myObject pickerView:foo numberOfRowsInComponent:bar]代码>
与C++风格相反:
myObject.pickerView(foo,bar)代码>
(NSInteger)组件
这是输入的最后一部分。此处的输入类型为
,具有局部变量名componentNSInteger
- (NSInteger) pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
numberOfRowsInComponent
是外部名称,从外部调用此方法时将使用该名称
component
是参数的内部名称,用于从方法内部引用参数
希望这能澄清一点。在我看来,Objective-C方法签名更像是句子。每个参数都应该在方法名称中包含一部分。例如,在C中,我们可以有一个方法(setPersonData)来设置有关person的一些信息:
void setPersonData( char* name, int age, float height ) {
在Objective-C中,该方法更具描述性(setPersonName:andAge:andHeight:),如
+1-很好的简短描述。有时,如果你把C风格的等效词写成“NSInteger PickerViewNumber of RowsIncomponent(UIPickerView*pickerView,NSInteger component),我会发现人们会感到兴奋。我喜欢你的解释,用C重写要好得多。+1是一个很好的答案。我建议在你的第一点中将“factory”改为“class”,因为+“正式表示类方法。碰巧很多“+”方法都是工厂方法,但这不是正确的定义。谢谢!还有一个问题:如果要像您显示的那样用变量foo和bar向对象myObject发送消息:[myObject pickerView:foo numberOfRowsInComponent:bar];pickerView是否引用了方法名称或参数?两者都没有。它同时引用方法名和参数是一种很好的样式,但完整的方法名实际上是pickerView:numberOfRowsInComponent:。如果您试图调用pickerView:,您将收到一个运行时错误,因为该方法不存在。让我澄清一下:pickerView:部分本身应该引用以下参数,以遵循良好的编码风格。但是,它只占方法名称的1/2。一个更好的例子可能是[myObject setX:foo Y:bar],其中方法是setX:Y:。我知道这个答案很老,但过去几年我一直生活在.NET世界中。我不熟悉Objective C,正在从网络世界过渡到移动行业。我想感谢你对这个问题的解释,它是如此的相关+1根据您的描述,可以将方法名称视为第一个参数的外部名称。这也符合wilczarz下面的评论。该死,我发现这个答案太不正确了。没有什么比参数的外部/内部名称更好的了。它是类型和变量标识符。我想知道为什么每个人都这么努力
void setPersonData( char* name, int age, float height ) {
- (void) setPersonName: (char *)name andAge:(int)age andHeight:(float)height {