延迟初始化和deinit

时间:2017-05-30 10:03:24

标签: swift lazy-initialization deinit

我想知道在我的视图控制器中是否可以使用惰性属性,并且在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

有没有办法实现这个目标?我有没有放弃懒惰的初始化想法?

1 个答案:

答案 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"