我是Objective-c的新程序员,我很难理解一些细节语法。例如,我应该如何解析此方法签名:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
我理解“ - ”char的含义,(UITableViewCell *)定义了返回类型。但其余的让我感到困惑。
答案 0 :(得分:11)
(1) (2) (3) (4) (5) (6) (7) (8)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell
指针UITableView
指针NSIndexPath
指针实际的方法签名是: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 ++中编写一大块程序