Instance member cannot be used on type Class?

前端 未结 1 1421
广开言路
广开言路 2020-12-20 09:14

I\'m trying to access the name variable from Indicator class, which inherits from Person. However, I believe I\'m not doing my initialization right.

I

相关标签:
1条回答
  • 2020-12-20 09:28

    You cannot access non-static stuff directly in a static method.

    The method letKnowPersonDeinitialized is static because it is modified with the static modifier:

    static func letKnowPersonDeinitialized() {
      ^
      |
    here!
    }
    

    The name property of Person is not static because it is not modified by static.

    Since non-static members belong to each individual instance of that class and static members belong to the class itself, static members have no direct access to non-static members. They can only access non-static members when an instance is present.

    To solve your problem, add a parameter to the letKnowPersonDeinitialized method:

    static func letKnowPersonDeinitialized(person: Person) {
        print(person.name)
    }
    

    And in the deinitializer:

    deinit {
        Indicator.letKnowPersonDeinitialized(self)
    }
    

    VERY IMPORTANT STUFF:

    I don't think your code is designed well. This is not how you use inheritance.

    Inheritance means "is a kind of". So if Indicator inherits from Person, it means that an indicator is a kind of person.

    According to common sense, an indicator is not a person. Therefore, it is not suitable to use inheritance here. It makes little sense.

    0 讨论(0)
提交回复
热议问题