实例成员不能用于类Class?

时间:2016-05-13 04:30:04

标签: swift init

我正在尝试从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)")
}
}

1 个答案:

答案 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,则表示指标是一种人。

根据常识,指标不是一个人。因此,这里不适合使用继承。这没什么意义。