gpt4 book ai didi

swift - 实例成员不能用在类型类上?

转载 作者:行者123 更新时间:2023-11-28 11:06:40 25 4
gpt4 key购买 nike

我正在尝试从继承自 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 修饰符修饰的:

static func letKnowPersonDeinitialized() {
^
|
here!
}

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

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

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

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

在析构器中:

deinit {
Indicator.letKnowPersonDeinitialized(self)
}

非常重要的东西:

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

继承的意思是“是一种”。因此,如果 Indicator 继承自 Person,则意味着指标是一种人。

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

关于swift - 实例成员不能用在类型类上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com