2017-05-30 131 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