实例成员不能用于类型 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!
}
Person
的name
属性不是静态的,因为它没有被static
修改。
由于非静态成员属于 class 的每个单独实例,而静态成员属于 class 本身,因此静态成员无法直接访问非静态成员。他们只能在实例存在时访问非静态成员。
要解决您的问题,请在 letKnowPersonDeinitialized
方法中添加一个参数:
static func letKnowPersonDeinitialized(person: Person) {
print(person.name)
}
在反初始化器中:
deinit {
Indicator.letKnowPersonDeinitialized(self)
}
非常重要的东西:
我觉得你的代码设计得不好。这不是您使用继承的方式。
继承意味着"is a kind of"。所以如果Indicator
继承自Person
,就说明一个指标是一种人。
按照常理,指标不是人。因此,这里不适合使用继承。意义不大。
我正在尝试从 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!
}
Person
的name
属性不是静态的,因为它没有被static
修改。
由于非静态成员属于 class 的每个单独实例,而静态成员属于 class 本身,因此静态成员无法直接访问非静态成员。他们只能在实例存在时访问非静态成员。
要解决您的问题,请在 letKnowPersonDeinitialized
方法中添加一个参数:
static func letKnowPersonDeinitialized(person: Person) {
print(person.name)
}
在反初始化器中:
deinit {
Indicator.letKnowPersonDeinitialized(self)
}
非常重要的东西:
我觉得你的代码设计得不好。这不是您使用继承的方式。
继承意味着"is a kind of"。所以如果Indicator
继承自Person
,就说明一个指标是一种人。
按照常理,指标不是人。因此,这里不适合使用继承。意义不大。