我刚开始学习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