空方法名称,这实际上做了什么?

Ner*_*too 10 objective-c ios

我目前正在学习自己的Objective-c和iOS编程,并发现自己因为这个微小的错误一小时而陷入了非工作代码.请考虑以下代码:

@property (strong, nonatomic) NSString *name;
- (NSString *):name { return @"Some name"; }
Run Code Online (Sandbox Code Playgroud)

乍一看(对于任何新人来说),这看起来像是一个被覆盖的name房产吸气剂.但这是非常微妙的:那不应该存在.这里没有来自编译器/解析器/运行时的警告/错误,所以我的问题是这实际上最终是什么?

一旦我看到错误,我试图找到一种调用此方法的方法,但在我的几次尝试中没有成功.

Jac*_*nce 13

方法签名- (NSString *):name分解为以下内容:

  • -它是一个实例方法(与具有a的类方法相比+).
  • (NSString *) 它返回一个字符串.
  • :如果你要说出这种方法的名称,那就简称为"冒号".:告诉编译器您的方法也接受一个参数.
  • name 有一个名为name的参数.

当你没有指定一个类型时,编译器假设你的意思id,所以这个方法实际上是充实的- (NSString *):(id)hello

对此方法的有效调用将是:[self :@"hello"].

你可以做一些非常奇怪的事情,因为它:是方法的有效名称,编译器假定id.如果你真的想,你可以有一个叫做的方法- :::.编译器会假设您的意思是- (id):(id):(id):(id),返回类型对象id并采用三个类型参数的方法id.你这样称呼它:[self :@"hello" :anObject :myObject];

  • +1,只是为了`如果你要说出这个方法的名字,它就简单地称为...冒号. (3认同)