我想知道在我的视图控制器中是否可以使用惰性属性,并且在deinit
方法中只有在初始化时才调用我的惰性属性的方法。下面是一些代码:
fileprivate lazy var session: MySession = {
let session: MySession = MySession()
session.delegate = self
return session
}()
deinit {
session.delete()
}
通过这种方式,当调用session.delete()
方法中的deinit
并且未使用session
时(仍然是nil
),它会被初始化,然后{ {1}}被调用。我不想要这个。我想仅在先前已初始化delete
时致电delete
。
有没有办法实现这个目标?我有没有放弃懒惰的初始化想法?
答案 0 :(得分:2)
您可以使用私有变量来跟踪是否已创建会话。我想这个例子可以做你想要的(来自游乐场的代码):
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?.something
thing = nil // Prints "deinit" and "Hello"