以下是问题的最简单形式:
class A {
var q: Bool = false
func setq() {
q = true
print("A: \(q)")
}
func getq() -> Bool {
return self.q
}
}
class B {
init() {
print("B: \(A().getq())")
}
}
A().setq()
B()
我无法访问q
q = true
,因为A()
中的B()
是A()
的新实例。
有没有办法在A()
内访问B()
的第一个实例?
答案 0 :(得分:4)
不是你编写代码的方式,没有。您需要为B提供一种方法来交付 A实例。例如,init
可能会使用A参数。
目前你甚至不能这样做,因为你不是你自己,拥有一个A实例。您在代码的第一行(A().setq()
)中创建一个A实例,然后将该实例抛弃。 (实际上,我很惊讶编译器并没有对此发出警告。)因此,B不仅没有引用A实例,而且你没有引用一个实例。
这是一个可能的纠正措施:
class B {
init (theA:A) {
print("B: \(theA.getq())")
}
}
let anA = A()
anA.setq()
B(theA:anA)
这就是OOP的本质。这一切都是为了安排事情,以便(1)你有实例,(2)这些实例足够长的有用,(3)一个实例可以获得参考到需要访问的另一个实例。每天照镜子并重复自己十次:" 代码存在于类中,但动作都是关于实例。"