附注::被称为冒号。分号是;。你的意思是冒号。
你遇到的东西叫做“点符号”,在Objective-C(2007,如果我没记错的话)是相对较新的。在那个时候,直到今天,由于它造成了混乱,它一直存在争议。
在Objective-C 2.0中添加了点表示法之前,括号表示法是调用方法的唯一方法,并且没有属性。所以,你的例子已被写入:
[[self layer] setBorderColor:[[UIColor blackColor] CGColor]];
这是ObjC是怎么了几十年写的。当ObjC2出来时,它为这个所谓的“点符号”添加了一个快捷方式。
self.layer.borderColor = [[UIColor blackColor] CGColor];
从理论上讲,点符号只应该用于属性。实际上,编译器允许您在任何时候使用具有正确签名的方法时使用它。这是其争议的一部分。现在有多种语法可以做同样的事情,而且当你使用一种或另一种语法时就是模糊的。也就是说,点符号是非常流行的,因为它可以轻松地减少打字(坦率地说,因为它看起来更像Java,我猜它是它的存在原因)。
点符号可能会令人困惑,因为它与结构符号模糊不清。例如,你所期望的工作情况如下:
self.frame.origin.x = 0.0;
不幸的是,self.frame
是用点符号的方法调用,但frame.origin
和origin.x
是结构的访问,这是完全不同的,并非有圆点符号兼容(所以上面不会编译)。没有办法从代码中知道这一点;你只需要知道frame
是如何工作的。
很长的故事很短,但在大多数情况下:
self.foo <=> [self foo]
self.foo = bar <=> [self setFoo:bar]
编译器只是转换前者为后者为方便程序员。
请举例说明。 – 2014-08-27 18:15:38
有人可以upvote我的问题,所以我不在负面,我试图建立我的声誉,所以我有机会获得更多的功能。但人们似乎不喜欢我的问题。 – CGTheLegend 2014-08-27 18:23:37
@CGTheLegend:人们可能不喜欢你的问题,因为1)它的原始版本不好(没有提供足够的细节),2)这个问题已经在这里问过很多次了......如果你有这个问题,你会找到你的答案已经使用了搜索功能。如果你想建立声誉,可以在你的问题(和答案)上付出更多的努力。提供更多细节,举例,具体。 – DarkDust 2014-08-27 18:44:06