我现在开始使用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 我对函数的含义或它应该做的事情不感兴趣,只是任何函数的语法和定义
答案 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对象调解应用程序的数据模型。数据源为表视图对象提供构造和修改表视图所需的信息。
许多方法都将NSIndexPath对象作为参数。 UITableView在NSIndexPath上声明一个类别,使您能够获取表示的行索引(行属性)和节索引(section属性),并从给定的行索引和节索引(indexPathForRow:inSection:class方法)构造索引路径。 (每个索引路径中的第一个索引标识该节,下一个标识该行。)
<强>参数强>
返回值
从UITableViewCell继承的对象,表视图可用于指定的行。如果你返回nil,则会引发断言。
返回的UITableViewCell对象通常是应用程序因性能原因而重用的对象。您应该通过向tableView发送dequeueReusableCellWithIdentifier:消息来获取先前创建的标记为重用的单元对象。根据单元格是否为分隔符以及数据源提供的信息(例如附件视图和编辑控件)自动设置表格单元格的各种属性。