附註::被稱爲冒號。分號是;。你的意思是冒號。
你遇到的東西叫做「點符號」,在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