我试图访问name从Person类继承的Indicator类的变量。但是,我认为我没有正确地进行初始化。
name
我得到以下信息:’错误:实例成员’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修饰符对其进行了修改:
letKnowPersonDeinitialized
static
static func letKnowPersonDeinitialized() { ^ | here! }
的name属性Person不是静态的,因为它没有被修改static。
Person
由于非静态成员属于该类的每个单独实例,而静态成员属于该类本身,因此静态成员无法直接访问非静态成员。存在实例时,它们只能访问非静态成员。
要解决您的问题,请在letKnowPersonDeinitialized方法中添加一个参数:
static func letKnowPersonDeinitialized(person: Person) { print(person.name) }
并在反初始化器中:
deinit { Indicator.letKnowPersonDeinitialized(self) }
我认为您的代码设计得不好。这不是您使用继承的方式。
继承意味着“是一种”。因此,如果Indicator继承自Person,则意味着指标是一种人。
Indicator
根据常识,指标不是人。因此,此处不适合使用继承。这没有什么意义。