实例成员不能用于类型 Class?

Instance member cannot be used on type Class?

我正在尝试从 Indicator class 访问 name 变量,它继承自 Person。但是,我相信我没有正确进行初始化。

我得到以下信息:'错误:实例成员 'name' 不能用于类型 'Indicator'`。

class Person {
    var name: String

    init(myName: String){
        self.name = myName
    }

    deinit {
        Indicator.letKnowPersonDeinitialized()
    }
}


class Indicator: Person {
    convenience init() {
        self.init()
    }

    static func letKnowPersonDeinitialized() {
        print("\(name)")
    }
}

您不能在静态方法中直接访问非静态内容。

方法letKnowPersonDeinitialized是静态的,因为它是用static修饰符修饰的:

static func letKnowPersonDeinitialized() {
  ^
  |
here!
}

Personname属性不是静态的,因为它没有被static修改。

由于非静态成员属于 class 的每个单独实例,而静态成员属于 class 本身,因此静态成员无法直接访问非静态成员。他们只能在实例存在时访问非静态成员。

要解决您的问题,请在 letKnowPersonDeinitialized 方法中添加一个参数:

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

在反初始化器中:

deinit {
    Indicator.letKnowPersonDeinitialized(self)
}

非常重要的东西:

我觉得你的代码设计得不好。这不是您使用继承的方式。

继承意味着"is a kind of"。所以如果Indicator继承自Person,就说明一个指标是一种人。

按照常理,指标不是人。因此,这里不适合使用继承。意义不大。