【问题标题】:Obj-C - Calling & setting values on ivars & instance methodsObjc - 在 ivars 和实例方法上调用和设置值
【发布时间】:2012-07-14 21:59:53
【问题描述】:

我不明白我在这里可能做错了什么,因为我正在遵循一本说明书 - 关于设置调用类方法的值。我已经#imported它,一切都应该没问题。但是 Xcode 抱怨:不知道“setWeightInKilos”和“setHeightInMeters”的类方法选择器。这些实例方法是在“Person”类中实现的,所以我不知道为什么会这样。

    Person *aPerson = [[Person alloc] init]; 
    [Person setWeightInKilos:96];
    [Person setHeightInMeters:1.8];
    float bmi = [Person bodyMassIndex];

【问题讨论】:

    标签: objective-c class methods instance


    【解决方案1】:

    这些是 instance 方法,而不是 class 方法。因此,您应该使用变量名称aPerson 在实例上调用它们,而不是使用类名称Person

    Person *aPerson = [[Person alloc] init];
    [aPerson setWeightInKilos:96];
    [aPerson setHeightInMeters:1.8];
    float bmi = [aPerson bodyMassIndex];
    

    一般来说,所有在前面用- 声明的方法都接受一个带有该类实例的变量;用+ 声明的方法采用类名。

    如果heightInMetersweightInKilos 被声明为属性,您还可以使用另一种语法:您可以这样写

    aPerson.weightInKilos = 96;
    aPerson.heightInMeters = 1.8;
    

    不过,这只是同一事物的不同语法;在这两种情况下都会调用 setter 方法。

    【讨论】:

      【解决方案2】:

      在 Objective C 中,有两种类型的方法。类方法,它们不作用于对象,而是通常执行与该对象类型相关的一些任务。例如,有内置的方法来测试网络连接、设备功能等。这些总是用“+”号表示,不能在对象实例上调用,只能在类本身上调用。

      其他类型的实例方法更为常见,它们作用于您实例化或自己创建的对象。这些是您在实现文件中编写的带有“-”前缀的方法。它们是您自己编写的 getter、setter 或方法之类的东西。

      在您的情况下,您需要在 Person 对象的实例上调用这些 setter 方法,而不是在 Person 类本身上。设置整个类的高度或重量没有意义(也不可能),因为每个对象都需要有自己独特的高度和重量。

      您需要致电:

      Person *aPerson = [[Person alloc] init]; 
      [aPerson setWeightInKilos:96];
      [aPerson setHeightInMeters:1.8];
      float bmi = [aPerson bodyMassIndex];
      

      【讨论】:

        【解决方案3】:

        您似乎想要设置名为weightheight 的实例变量。所以要修复它,请执行以下操作:

        Person *aPerson = [[Person alloc] init]; 
        [aPerson setWeightInKilos:96];
        [aPerson setHeightInMeters:1.8];
        

        【讨论】:

        • +1 为什么会有人对此投反对票?这是一个非常好的答案!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        • 2015-12-18
        • 1970-01-01
        • 2010-12-22
        • 2012-07-14
        • 2012-11-02
        • 1970-01-01
        相关资源
        最近更新 更多