关于ios:Objective C函数定义语法

ObjectiveC function definition syntax

本问题已经有最佳答案,请猛点这里访问。

我现在从Objective开始,想知道这个函数定义是什么意思

1
2
3
4
5
6
7
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    // access to tableView, is it a variable?
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    ...
    return cell;
}

我想知道TableView是什么,函数名cellForRowAtIndexPath之前的部分是什么意思。

正如我从示例代码中看到的,tableView是一个变量。但是,(UITableViewCell *)tableView:(UITableView *)tableView是什么意思?我以为返回值只在函数名之前?

更新1也许我应该提到我熟悉的语言,如C/C++,Java,…

更新2我对函数的意义或它应该做什么不感兴趣,只对语法和类似函数的定义感兴趣。


Objective EC有一个非常有趣的命名约定。

开头的-表示这是一个实例方法。类(静态)方法有一个+

接下来是返回类型(UITableViewCell *)。小*表示返回值是一个适当的对象,而不是像nsinteger这样的原始数据类型。

后面是参数。实际上,参数和方法名有点混淆。如果删除形式参数,会得到

1
tableView:cellForRowAtIndexPath:

这是函数的名称。您不会像其他语言那样在末尾传递参数,而是在冒号后面传递。因此,方法名称具有很强的描述性。

Java吊坠可能看起来像这样

1
public UITableViewCell getCell(UITableView view, NSIndexPath path)

(ObjectiveC没有公有/私有,因此我公开了Java方法)。


返回类型为- (UITableViewCell *)。您需要返回UITableViewCell或子代。

tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath是方法名。它包括两部分:

  • 第一个论点;和
  • 第二个论点。

这个特定的方法是委托协议的一部分——苹果(以及其他公司)使用的一种设计模式,其中一个特定的类负责一组事情,而委托其他事情。在这种特殊情况下,接收者是UITableView的代表。因此,第一个参数告诉您哪个表视图正在请求(这是委托协议的正常模式,但不是强制执行的,而且,有趣的是,初学者在创建自己的协议时常常忽略了这个模式),第二个参数告诉您它在请求什么。

委托可能负责多个表视图,至少一个表视图是全部的,但肯定会包含多个索引路径,因此需要这两个信息。


UITableViewDataSource协议被一个对象采用,该对象为UITableView对象中介应用程序的数据模型。数据源向表视图对象提供了构建和修改表视图所需的信息。

许多方法都将nsindxpath对象作为参数。uiTableView在nsindxpath上声明了一个类别,该类别使您能够获取表示的行索引(行属性)和节索引(节属性),以及从给定的行索引和节索引(indexPathForRow:Division:Class方法)构造索引路径。(每个索引路径中的第一个索引标识该节,下一个索引标识该行。)

参数

  • TableView:-请求单元格的表视图对象。
  • index path:-在TableView中定位行的索引路径。

返回值

从表视图可用于指定行的UITableViewCell继承的对象。如果返回nil,则会引发断言。

返回的UITableViewCell对象通常是应用程序出于性能原因而重用的对象。您应该通过向TableView发送dequeuereusBellWithIdentifier:message来获取以前创建的单元格对象,该对象被标记为可重用。表格单元格的各种属性根据单元格是否为分隔符以及数据源提供的信息(如附件视图和编辑控件)自动设置。


Objective-C编程语言中方法定义的一般形式如下:

1
2
3
4
5
6
- (return_type) method_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen
{
     body of the function
     }

A method definition in Objective-C programming language consists of a method header and a method body. Here are all the parts of a method:

Return Type: A method may return a value. The return_type is the data type of the value the function returns. Some methods perform the desired operations without returning a value. In this case, the return_type is the keyword void.

Method Name: This is the actual name of the method. The method name and the parameter list together constitute the method signature.

Arguments: A argument is like a placeholder. When a function is invoked, you pass a value to the argument. This value is referred to as actual parameter or argument. The parameter list refers to the type, order, and number of the arguments of a method. Arguments are optional; that is, a method may contain no argument.

Joining Argument: A joining argument is to make it easier to read and to make it clear while calling it.

Method Body: The method body contains a collection of statements that define what the method does.

以你为例

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

tableView is method Name

tableView cellForRowAtIndexPath is the name for second Argument (it is used to make a clear sense what our next argument will contain)

and at last this method will return a UITableViewCell.