我剛開始學習Objective-C,我不確定何時使用點符號與方括號。我知道一個類似的問題已被問到here,但我仍然沒有真正理解其中的差異。我讀過[myObject doSomething]
和myObject.doSomething
是等同的。但我不確定的是,當我使用@property
生成一個方法時,它會自動生成一個setter方法,我只能使用方括號。錯誤「找不到屬性setVariableName」使用點符號設置屬性
// MyClass.h
@interface MyClass : NSObject
@property int number;
// main.m
MyClass *object = [[MyClass alloc] init];
[object setNumber:3];
object.setNumber = 4; // Property 'setNumber' not found
爲什麼我收到錯誤消息,當我寫object.setNumber = 4
,爲什麼我只能用方括號呢?
使用'object.number = 4' –
帶點表示法的等效語句是object.number = 4,而不是object.setNumber = 4.點表示法使用屬性本身的名稱,而不是使用setter的名稱。 – rdelmar
只要您有一個採用0或1個參數的方法,就可以使用點表示法。你的代碼的問題是(爲什麼你會得到警告),你必須*不*在點表示法中使用'set'。這是爲什麼?編譯器從點符號生成常規方法調用。所以如果你寫'object.number = 4;'編譯器生成'[object setNumber:4];'。這就是爲什麼當你編寫'object.setNumber = 4;'時它不起作用,因爲編譯器生成了'[object setSetNumber:4];'而且這個方法不存在。 – HAS