objective-c中的方法语法

时间:2010-07-07 16:06:15

标签: objective-c

我是Objective-c的新程序员,我很难理解一些细节语法。例如,我应该如何解析此方法签名:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath {

我理解“ - ”char的含义,(UITableViewCell *)定义了返回类型。但其余的让我感到困惑。

6 个答案:

答案 0 :(得分:11)

(1)      (2)          (3)            (4)         (5)             (6)                 (7)       (8)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
  1. “ -​​ ”定义实例方法
  2. 返回UITableViewCell指针
  3. 方法签名的第一部分名为“tableView”
  4. 采用UITableView指针
  5. 使用本地变量名称“tableView”
  6. 方法签名“cellForRowAtIndexPath”
  7. 的第二部分
  8. 采用NSIndexPath指针
  9. 使用本地变量名称“indexPath”。
  10. 实际的方法签名是:tableView:cellForRowAtIndexPath:

答案 1 :(得分:4)

Objective-C使用命名的内联参数进行方法。 (正如bblum在下面的评论中指出的那样,这种参数样式有时被称为“交错”。)这反映了它作为C和SmallTalk语法的混合。尾随冒号表示方法的参数名称。对于您的方法,该方法的全名称为tableView:cellForRowAtIndexPath:。它需要两个参数,一个指向UITableView的指针和一个指向NSIndexPath的指针。在类似java的语言中,此方法签名类似于:

   public UITableViewCell cellInTableViewForRowAtIndexPath(UITableView tableView, NSIndexPath indexPath);

答案 2 :(得分:4)

阅读Apple的文档,例如Objective-C: A Primer。它就在那里解释了。你知道,制造商(Apple或微软)在他们的网站上有很多文档......

答案 3 :(得分:2)

每个foo:(bar)baz定义一个参数,例如

- (id)initWithTitle:(NSString *)title
            message:(NSString *)message
           delegate:(id)delegate
  cancelButtonTitle:(NSString *)cancelButtonTitle
  otherButtonTitles:(NSString *)otherButtonTitles, ... {

定义了一个带有五个*参数的方法。

:之前的内容是方法名称的一部分。在此示例中,方法的名称为

initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:

(…)之间的东西是该参数的类型。在这里,我们看到第一个参数必须是NSString*

最后,它是参数的名称。

(*:有时会有, ...,就像在这里一样,表明它是一种可变方法。)

该方法在语法

中调用
id result = [theAllocedAlertView initWithTitle:@"title"
                                       message:@"message"
                                      delegate:someDelegate
                             cancelButtonTitle:@"cancel button title"
                             otherButtonTitles:@"other", @"button", @"titles", nil];

因此重复该方法的名称(按顺序!),参数名称由实际参数替换。

在C#中,相应的函数签名看起来像

object InitWithTitleAndMessageAndDelegateAndCancelButtonTitleAndOtherButtonTitles(
        string title,
        string message,
        object delegate,
        string cancelButtonTitle,
        params string[] otherButtonTitles);

并调用

object result = theAllocedAlertView.InitWithBlahBlahBlahAndOtherButtonTitles(
                   "title",
                   "message",
                   someDelegate,
                   "cancel button title",
                   "other", "button", "titles");

答案 4 :(得分:0)

方法选择器是:

tableView:cellForRowAtIndexPath:

其中冒号后面的每个值都是一个参数。签名的意思是英文句子,即“TableView在此索引处的行的单元格”。

答案 5 :(得分:0)

如果这是用另一种语言写的,它可能看起来像这样

// @param (UITableView *) tableView
// @param (NSIndexPath*)indexPath
// @return UITableViewCell
- (UITableViewCell *) someFunctionName(tableView, indexPath) {

}

当然大致说到了。在objective-c中不会这样写。但是我相信可以在c ++中编写一大块程序