Obj-C - 在ivars和实例方法上调用和设置值
我不明白我在做什么错,因为我遵循一个指令书 - 设置调用类的方法的值。我有#进口它,一切都应该没问题。但是Xcode的抱怨:对“setWeightInKilos和‘setHeightInMeters不知道类方法选择人‘类,所以我不知道为什么会这样Obj-C - 在ivars和实例方法上调用和设置值
Person *aPerson = [[Person alloc] init];
[Person setWeightInKilos:96];
[Person setHeightInMeters:1.8];
float bmi = [Person bodyMassIndex];
在Objective C中,有两种类型的方法。类方法,它不作用于对象,而是通常执行与该类型对象相关的某个任务。例如,内置用于测试网络连接,设备功能等的方法。这些方法总是用“+”号表示,不能在对象实例上调用,只能在类本身上调用。
其他类型,实例方法,更常见,并且对您自己创建的对象实例化或创建自己。这些是您在实现文件中用“ - ”前缀编写的方法。它们是你自己编写的getter,setter或方法。
在你的情况下,你需要在Person对象的实例上调用这些setter方法,而不是Person类本身。设置整个班级的高度或重量(也是不可能的)是没有意义的,因为每个物体都需要有自己独特的身高和体重。
你需要调用:
Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];
这些例如方法’,这些实例方法都在实现。’ ,不类方法,因此,你应该使用变量aPerson
的名称来调用它们的实例,而不是类Person
的名字:
Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];
一般情况下,所有的方法声明d前面的-
带有一个该类的实例的变量;用+
声明的方法取类名称。
还有,如果heightInMeters
和weightInKilos
被声明为属性,你可以使用替代语法:你可以写
aPerson.weightInKilos = 96;
aPerson.heightInMeters = 1.8;
这仅仅是同样的事情,虽然不同的语法;在两种情况下都会调用setter方法。
它看起来像你想要设置实例变量,称为weight
和height
。所以要修复它,请执行以下操作:
Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
为什么downvote? – pasawaya 2012-07-16 03:44:20
+1为什么会有人下降呢?这是一个非常好的答案! – dasblinkenlight 2012-07-16 03:45:40
当然!我应该看到...谢谢。 – 2012-07-16 03:39:49