2016-04-06 6 views
0

Heute sah ich einige Code, die mich verwirrt:Swift Syntax: faul

lazy var variable = {......}() 

ich jemand hoffen, dass die Nutzung von lazy für mich erklären.

+3

Bitte verwenden Sie keine Bilder für Code. Bildlinks können ungültig werden und dann weiß niemand, worum es geht. Außerdem können wir den Code nicht kopieren und einfügen, um damit herumzuspielen. Also, bitte ** bearbeiten Sie Ihre Frage ** und fügen Sie den Code hinzu, über den Sie sprechen. – DarkDust

+0

Vielen Dank für Ihren Vorschlag, verzeihen Sie mir, ich bin ein neues Mitglied in Stack-Überlauf, ich werde darauf achten, das nächste Mal. Der Code wie folgt: lazy var managedObjectModel: NSManagedObjectModel = { Let ModelURL = NSBundle.mainBundle(). URLForResource ("DailyRecord", mit Erweiterung: "momd")! Rückgabe NSManagedObjectModel (contentsOfURL: modelURL)! }() – Jixes

+0

Kein Schwitzen, ich gab Ihnen diese Hinweise * weil * Sie neu sind :-) Sie werden eher eine gute Antwort erhalten, wenn Sie eine gute Frage stellen. Beim nächsten Mal bitte bearbeiten Sie Ihre Frage (klicken Sie auf den Link * edit * unter der Frage), wenn wir Sie dazu auffordern: Code in Kommentaren kann nicht gut formatiert werden und die Leute suchen oft nicht nach zusätzlichen Informationen in den Kommentaren . Es ist besser für Sie, alle relevanten Informationen in der Frage selbst zu haben. Habe Spaß! – DarkDust

Antwort

0
lazy var variable: Class = { 
    <initialisation> 
    return <resulting object> 
}() 

entspricht:

var _variable: Class? 
var variable: Class { 
    get{ 
     if _variable == nil { 
      <initialisation> 
      _variable = <resulting object> 
     } 

     return _variable! 
    } 
} 

Kurz gesagt: es initialisiert das Objekt, wenn es

+0

danke für deine Detailerklärung! – Jixes

+0

hallo @ simpleBob, jetzt habe ich ein anderes Problem machen mich verwirrt, ich kann nichts tun, ohne es zu lösen, jetzt, ich mache eine App, die Kerndaten verwenden, aber ich triff ein Problem, bitte hilf mir ..... >. <..... – Jixes

+0

aber ich kann nicht nächste frage witing am nächsten tag im satckoverflow @simpleBob stellen. – Jixes

1

Lazy-Initialisierung (auch manchmal Lazy Instantiierung oder Lazy Loading genannt) ist eine Technik, um die Erstellung eines Objekts oder eines anderen teuren Prozesses zu verzögern, bis es benötigt. Bei der Programmierung für iOS ist dies hilfreich, um sicherzustellen, dass Sie nur den Speicher verwenden, den Sie benötigen, wenn Sie ihn benötigen.

Diese Technik ist in der Tat so hilfreich, dass Swift direkte Unterstützung dafür mit dem faulen Attribut hinzugefügt hat.

Um zu verstehen, warum dies nützlich ist, gehen wir zuerst über die alte Art der Erstellung von faulen Eigenschaften.

Werfen Sie einen Blick auf diese ist link

0

Im Beispielcode geschrieben benötigt wird, in der Frage: Das Lazy-Qualifikationsmerkmal bewirkt, dass die Instanzvariable nur dann auf die Zuweisung initialisiert wird, wenn die Variable referenziert wird. In diesem Beispiel ist die Zuweisung tatsächlich das Ergebnis einer Abschlussbewertung, die möglicherweise teuer sein könnte. Wenn Sie die Variable als "träge" markieren, verringert sich der Aufwand beim Instanziieren des Objekts, indem die Auswertung des Abschlusses aufgeschoben wird, bis die Variable tatsächlich verwendet wird. Darüber hinaus kann die Zuordnung Abhängigkeiten aufweisen, die während der normalen Phase der Initialisierung der Variablen nicht erfüllt wären, aber während des ersten Zugriffs der Variablen erfüllt wären. Daher kann die verzögerte Initialisierung ermöglichen, dass die Variable zu einem passenderen Zeitpunkt initialisiert wird.

+0

vielen Dank, es ist hilfreich für mich – Jixes