ObjectiveC函数定义语法

时间:2016-01-08 14:12:25

标签: ios objective-c function

我现在开始使用ObjectiveC,并想知道这个函数定义意味着什么

- (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 我对函数的含义或它应该做的事情不感兴趣,只是任何函数的语法和定义

4 个答案:

答案 0 :(得分:3)

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

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

接下来是返回类型(UITableViewCell *)。小*表示返回值是一个正确的对象,而不是NSInteger之类的原始数据类型。

接下来是参数。实际上参数和方法名称有点混淆。 如果删除形式参数,则会得到类似

的内容
tableView:cellForRowAtIndexPath:

这是该功能的名称。您不会像在其他语言中那样传递参数,而是在冒号后面。因此,方法名称非常具有描述性。

Java挂件可能看起来像这样

public UITableViewCell getCell(UITableView view, NSIndexPath path)

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

答案 1 :(得分:2)

<!--XAML--> <ComboBox x:Name="ComboBoxFrom" SelectedValue="{Binding FilterService.TripLengthFrom, Mode=TwoWay}" /> // Code behind public partial class FilterView : UserControl { public FilterView() { this.InitializeComponent(); this.ComboBoxFrom.SelectedValuePath = "Key"; this.ComboBoxFrom.DisplayMemberPath = "Value"; this.ComboBoxFrom.Items.Add(new KeyValuePair<int, string>(0, "0")); this.ComboBoxFrom.Items.Add(new KeyValuePair<int, string>(30, "30")); this.ComboBoxFrom.Items.Add(new KeyValuePair<int, string>(50, "50")); this.ComboBoxFrom.Items.Add(new KeyValuePair<int, string>(100, "100")); } 是返回类型。您将需要返回UITableViewCell或后代。

var audioContext = new AudioContext(); var microphone = audioContext.createMediaStreamSource(stream); recorder = new Recorder(microphone, { numChannels: 1, sampleRate: 8000 }); 是方法名称。它包含两部分:

  • - (UITableViewCell *),第一个参数;和
  • tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath,第二个论点。

这种特殊方法是委托协议的一部分 - Apple(以及其他)使用的设计模式之一,其中特定类负责一组事物但委托其他事物负责。在这种特殊情况下,接收者是tableView:(UITableView *)tableView的代表。所以第一个参数告诉你哪个表视图正在询问(这是委托协议的正常模式,但没有强制执行,并且有趣的是,初学者在创建自己的协议时经常忽略的东西),第二个参数告诉你它是什么问题约。

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

答案 2 :(得分:0)

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

- (return_type) method_name:( argumentType1 )argumentName1 
joiningArgument2:( argumentType2 )argumentName2 ... 
joiningArgumentn:( argumentTypen )argumentNamen 
{
     body of the function
     }
  

Objective-C编程语言中的方法定义由方法头和方法体组成。以下是方法的所有部分:

     

返回类型:方法可以返回值。 return_type是函数返回的值的数据类型。某些方法在不返回值的情况下执行所需的操作。在这种情况下,return_type是关键字void。

     

方法名称:这是方法的实际名称。方法名称和参数列表一起构成方法签名。

     

参数:参数就像一个占位符。调用函数时,将值传递给参数。该值称为实际参数或参数。参数列表指的是方法的参数的类型,顺序和数量。参数是可选的;也就是说,方法可能不包含任何参数。

     

加入参数:加入参数是为了让它更易于阅读,并在调用时清楚说明。

     

方法体:方法体包含一组语句,用于定义方法的作用。

在您的情况下

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

tableView是方法名称

     

tableView cellForRowAtIndexPath是第二个Argument的名称(它用于清楚地了解我们的下一个参数将包含的内容)

     

最后这个方法将返回一个UITableViewCell。

答案 3 :(得分:0)

UITableViewDataSource协议由一个对象采用,该对象为UITableView对象调解应用程序的数据模型。数据源为表视图对象提供构造和修改表视图所需的信息。

许多方法都将N​​SIndexPath对象作为参数。 UITableView在NSIndexPath上声明一个类别,使您能够获取表示的行索引(行属性)和节索引(section属性),并从给定的行索引和节索引(indexPathForRow:inSection:class方法)构造索引路径。 (每个索引路径中的第一个索引标识该节,下一个标识该行。)

<强>参数

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

返回值

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

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