2017-05-30 5 views
0

Ich würde wissen, wenn es möglich ist, in meiner Sicht Controller, eine faule Eigenschaft verwenden und in deinit Methode eine Methode meiner faulen Eigenschaft nur aufrufen, wenn es initialisiert wurde. Im Folgenden einige Code:Lazy Initialisierung und deinit

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

deinit { 
    session.delete() 
} 

Auf diese Weise, wenn session.delete() im deinit Methode aufgerufen wird und session wurde nicht verwendet (so ist noch nil), wird es initialisiert und dann delete genannt wird. Ich will das nicht. Ich möchte delete nur aufrufen, wenn zuvor session initialisiert wurde.

Gibt es einen Weg, dies zu erreichen? Muss ich die faule Initialisierungsidee loslassen?

Antwort

1

Sie können eine private Variable verwenden, um zu verfolgen, ob die Sitzung erstellt wurde. Dieses Beispiel macht, was Sie wollen, denke ich (Code von einem Spielplatz):

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

Danke! Ich hätte das für mich selbst herausfinden können :-) – Giorgio