为什么在使用闭包创建 属性 时不允许使用 self?

Why is it not allowed to use self when creating a property using closure?

// Design Protocol
protocol SendDataDelegate {}

// Design Sender/Delegator
class SendingVC {
    var delegate: SendDataDelegate?
    
    deinit {
        print("Delegator gone")
    }
}

// Design Receiver/Delegate
class ReceivingVC: SendDataDelegate {
    lazy var sendingVC: SendingVC = { // if i don't use lazy, i am not allowed to use self within the closure.
        let vc = SendingVC()
        vc.delegate = self // here
        return vc
    }()
    
    deinit {
        print("Delegate gone")
    }
}

这背后的原因是什么? 根据我在网上找到的内容:由于对象未初始化,因此 self 不可用,这甚至意味着什么?

字面意思。

  • 如果你不说 lazy,那么你正在尝试用你的等号 (=) 初始化 sendingVC,一个实例 属性 的 ReceivingVC,同时正在初始化 ReceivingVC 实例本身 (self)。在它自己的初始化过程中提到 self 是循环的,所以它是被禁止的。

  • 通过说 lazy,您是在说:不要初始化 sendingVC 直到某个时间 ReceivingVC 实例(self) 已经初始化——也就是说,当一些其他代码引用它时。这解决了问题,现在允许提及 self