我想知道是否有可能在我的视图控制器中使用惰性属性并在deinit
方法仅在初始化时才调用我的惰性属性的方法。下面是一些代码:
fileprivate lazy var session: MySession = {
let session: MySession = MySession()
session.delegate = self
return session
}()
deinit {
session.delete()
}
这样,当session.delete()
in the deinit
方法被调用并且session
尚未使用(所以仍然nil
),它被初始化,然后delete
叫做。我不想要这个。我想打电话delete
除非session
之前已经初始化过。
有办法实现这一点吗?我必须放弃惰性初始化的想法吗?
您可以使用私有变量来跟踪会话是否已创建。我认为这个例子做了你想要的(来自操场的代码):
class Thing {
private var hasMadeSession: Bool = false
lazy fileprivate var session: Int = {
self.hasMadeSession = true
return 1
}()
deinit {
print(#function)
if self.hasMadeSession {
print("Hello")
}
}
}
var thing: Thing? = Thing()
thing = nil // Prints "deinit"
thing = Thing()
thing?.session
thing = nil // Prints "deinit" and "Hello"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)