gpt4 book ai didi

swift - 惰性初始化和 deinit

转载 作者:搜寻专家 更新时间:2023-11-01 06:16:18 25 4
gpt4 key购买 nike

我想知道是否有可能在我的 View Controller 中使用惰性属性,并在 deinit 方法中仅在初始化时调用我的惰性属性的方法。下面是一些代码:

fileprivate lazy var session: MySession = {
let session: MySession = MySession()
session.delegate = self
return session
}()

deinit {
session.delete()
}

这样,当deinit方法中的session.delete()被调用时,session还没有被使用(所以是仍然是 nil),它被初始化,然后 delete 被调用。我不想要这个。仅当 session 之前已初始化时,我才想调用 delete

有办法实现吗?我必须放弃惰性初始化的想法吗?

最佳答案

您可以使用私有(private)变量来跟踪 session 是否已创建。这个例子做了你想要的,我想(来自 Playground 的代码):

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"

关于swift - 惰性初始化和 deinit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44259194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com