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")
}
}