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