从Swift 2中的另一个类访问动态值

时间:2016-03-05 17:42:04

标签: swift class oop variables instance

以下是问题的最简单形式:

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()的第一个实例?

1 个答案:

答案 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)一个实例可以获得参考到需要访问的另一个实例。每天照镜子并重复自己十次:" 代码存在于中,但动作都是关于实例。"