2017-05-30 196 views
0

我想知道是否有可能在我的视图控制器中使用懒惰属性,并且在deinit方法只有在初始化时才调用我的懒惰属性的方法。下面的一些代码:懒惰的初始化和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

有没有办法做到这一点?我有没有放过懒惰的初始化想法?

回答

1

您可以使用私有变量来跟踪会话是否已创建。这个例子做你想做的,我想(来自游乐场的代码):

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" 
+0

谢谢!我本可以为自己弄明白:-) – Giorgio

相关问题