我目前正在自学 Objective-C 和 iOS 编程,发现自己由于这个微妙的错误而陷入了无法工作的代码一个小时。
考虑以下代码:
@property (strong, nonatomic) NSString *name;
- (NSString *):name { return @"Some name"; }
乍一看(对于任何新手来说)这看起来像是一个被重写的 gettername
财产。但有一个非常微妙的:那不应该在那里。在这里,您不会从编译器/解析器/运行时收到任何警告/错误,所以我的问题是这实际上最终会是什么?
当我看到错误时,我试图找出一种调用此方法的方法,但在我的几次尝试中都没有成功。
方法签名- (NSString *):name
细分为以下内容:
-
-
它是一个实例方法(与带有+
).
-
(NSString *)
它返回一个字符串。
-
:
如果你要说出这个方法的名称,它会简单地称为“冒号”。:
告诉编译器您的方法也接受一个参数。
-
name
有一个参数叫name。
当您不指定类型时,编译器会假设您的意思是id
,所以这个方法实际上是- (NSString *):(id)hello
对此方法的有效调用是:[self :@"hello"]
.
你可以做一些非常奇怪的事情,因为:
是方法的有效名称,编译器假设id
。如果你真的愿意,你可以有一个名为- :::
。编译器会假设你的意思是- (id):(id):(id):(id)
,返回类型对象的方法id
并采用三个类型的参数id
。你可以这样称呼它:[self :@"hello" :anObject :myObject];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)