gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:39:29 24 4
gpt4 key购买 nike

我正在尝试从继承自 Person 的 Indicator 类访问 name 变量。但是,我相信我的初始化没有正确。

我得到以下信息:“错误:实例成员“名称”不能在类型“指示器”上使用。

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/49403390/

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