我不明白我在这里做错了什么,因为我正在按照说明书 - 设置值调用类的方法。我有#imported它,一切都应该没问题。但Xcode抱怨:没有知道“setWeightInKilos和”setHeightInMeters“的类方法选择器。这些实例方法是在”Person“类中实现的,所以我不知道为什么会这样。
Person *aPerson = [[Person alloc] init];
[Person setWeightInKilos:96];
[Person setHeightInMeters:1.8];
float bmi = [Person bodyMassIndex];
答案 0 :(得分:3)
这些是实例方法,而不是类方法。因此,您应该使用变量aPerson
的名称在实例上调用它们,而不是类Person
的名称:
Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];
通常,前面用-
声明的所有方法都会使用该类的实例获取变量;使用+
声明的方法采用类名。
如果将heightInMeters
和weightInKilos
声明为属性,还可以使用替代语法:您可以编写
aPerson.weightInKilos = 96;
aPerson.heightInMeters = 1.8;
但这只是针对同一事物的不同语法;在这两种情况下都会调用setter方法。
答案 1 :(得分:2)
看起来您想要设置名为weight
和height
的实例变量。所以要解决它,请执行以下操作:
Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
答案 2 :(得分:2)
在Objective C中,有两种类型的方法。类方法,它不作用于对象,而是通常执行与该对象类型相关的某些任务。例如,有内置方法来测试网络连接,设备功能等。这些方法总是用“+”符号表示,不能在对象实例上调用,只能在类本身上调用。
另一种类型,实例方法,更常见,并且对实例化或自己创建的对象起作用。这些是您在实现文件中使用“ - ”前缀编写的方法。它们就像你自己写的吸气剂,制定者或方法。
在您的情况下,您需要在Person对象的实例上调用这些setter方法,而不是Person类本身。设置整个班级的高度或重量是不合理的(也不可能),因为每个物体都需要有自己独特的高度和重量。
您需要致电:
Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];