举例:
-(void)setName:(NSString *)name age:(int)age;
你如何调用这个方法(换句话说,方法的名称是setName,但是那里的“age”参数是什么)括号中的类型是什么意思?它只是一种告诉编译器返回什么类型的方法吗?
答案 0 :(得分:3)
[ myObject setName: @"Adam" age:18 ];
age
参数是方法签名中的第二个参数。
括号中的类型是参数的预期类型。例如name
只期待NSString
而age
只期待int
。
-
表示该方法是实例方法,而不是类方法,而是使用+
表示。
-
之后的括号中的类型是返回类型。
这是学习Objective-C基础知识的绝佳网站:CocoaDevCentral
答案 1 :(得分:1)
这是标准的Objective-C方法语法。这可以理解为:
没有返回值(void)的方法 设置对象的名称(NSString *参数) 和年龄(和整数 参数)。
解剖方法:
“ - ”连字符表示这是一种实例方法。
(void)返回类型为void - 或 没有预期的退货类型
setName:(NSString *)第一个 要传递的参数是“名称” 并且是一个NSString *。
age:(int)age第二个参数 要通过的是“年龄”而且是 一个int。
实际上,一旦理解了方法语法实际上是非常自我记录的(如果你习惯了更传统的C / C ++或Java语法,那么它就非常陌生)。
此方法调用的实际示例如下:
[someObject setName:@"Rich" age:101];
答案 2 :(得分:1)
要回答,人们需要更多的信息,但我猜这是来自某种名为aClass的类,你有一个aClass的实例,名为instance。
-(void)setName:(NSString *)name age:(int)age;
表示你有一个名为setName:age:的方法,它需要两个参数,一个NSString,一个int,它返回一个void。因为它是 - 作为它的第一个字符,它是一个实例方法。
[instance setName:@"James Hargrove" age:21];
将在实例上调用setName:age:。
(应该使用
创建实例aClass *instance = [[aClass alloc] init];
将创建一个aClass命名实例的实例,并初始化它。
答案 3 :(得分:1)
方法名称实际上是这样的:
setName:age:
你这样称呼它:
[someObject setName:@"Alice" age:20];
setName:age:
也是该方法的唯一签名,使用该签名,您可以在任何对象上调用该方法。例如:
NSArray* objects = ...
SEL mySelector = @selector(setName:age:);
for (id object in objects)
{
if ([object respondsToSelector:mySelector])
{
[object setName:@"Alice" age:20];
}
}
括号中的类型是什么意思?它只是一种告诉编译器返回什么类型的方法吗?
是的,那些是“C演员”。如果一切都是一个对象,你就不需要那些,但是因为你可以传递和返回普通的旧C类型,所以编译器需要知道你的参数类型和返回值。
答案 4 :(得分:0)
你可以这样称呼这个方法:
[classInstance setName:@"name" age:123];
“age:”的第一个实例表示该方法在方法实现中使用时会接收另一个名为“age”的参数。
括号中的类型表示每个参数所需的数据类型,第一个参数除外,“void”,这意味着此方法不返回任何内容。
答案 5 :(得分:0)
因此,您可以按如下方式调用此方法。
假设它是一个名为foo(类Foo)的对象的方法。然后你会打电话:
[foo setName:someName age:someAge].
如果它是静态方法,则前面会加一个+而不是一个减号,如下所示:
+(void)setName:(NSString *)name age:(int)age;
然后你会打电话给
[Foo setName:someName age:someAge] //use the classname instead of the object name
这些类型确实存在于编译器进行类型检查。如果传递错误的数据类型,您将收到警告,如果您的标题与您的实现不符,您将收到警告。
你可以用几种不同的风格编写Obj-C函数,省略一些这些东西。你甚至可以直接写C风格。