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

Swift 为什么在使用闭包创建属性时不允许使用self?,swift,delegates,closures,self,Swift,Delegates,Closures,Self,这背后的原因是什么? 从我在网上发现的情况来看:既然对象没有初始化,那么self就不可用,这到底是什么意思呢?它的意思就是它所说的 如果您不说lazy,那么使用等号=您正试图初始化sendingVC(ReceivingVC的实例属性),而ReceivingVC实例本身正在初始化。在其自身初始化过程中提及self是循环的,因此是禁止的 通过说lazy,您是在说:在ReceivingVC实例自身被初始化之前不要初始化sendingVC,也就是说,当其他代码引用它时。这解决了问题,现在允许提及自我 自

这背后的原因是什么?
从我在网上发现的情况来看:既然对象没有初始化,那么self就不可用,这到底是什么意思呢?

它的意思就是它所说的

如果您不说lazy,那么使用等号=您正试图初始化sendingVC(ReceivingVC的实例属性),而ReceivingVC实例本身正在初始化。在其自身初始化过程中提及self是循环的,因此是禁止的

通过说lazy,您是在说:在ReceivingVC实例自身被初始化之前不要初始化sendingVC,也就是说,当其他代码引用它时。这解决了问题,现在允许提及自我

自我只是指对象本身,整体而言。你的对象还没有通过它的初始值设定项,这意味着它还没有完成。一旦一个对象完成了它自己的生命周期,那么self就可以使用了。
// 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")
    }
}