Ich entwickle eine einfache iOS-App, um Swift zu lernen und ich benutze Realm.
Soweit ich weiß, werden in Realm inverse Beziehungen mit einer LinkingObjects
-Eigenschaft erreicht, bei der es sich um eine Sammlung handelt, die alle Objekte enthält, die mit dieser verknüpft sind.
Betrachten Sie dieses Beispiel aus der Realm-Dokumentation:
%Vor% In meinem Modell weiß ich, dass jede Dog
Instanz nur einen Besitzer hat, da jeder Hund, wenn er erstellt wird, nur zu einem Person
hinzugefügt wird List
.
Jetzt hätte ich gerne eine owner: Person
-Eigenschaft in der Dog
-Klasse, die auf ihren einzigen Besitzer verweist, um den Code intuitiver und einfacher zu machen (anstatt jedes Mal dog.owners.first
schreiben zu müssen), während der lazy-loading Verhalten (sie sind faul geladen, oder?).
Ich weiß nicht, wie teuer es ist, die "Verknüpfungsobjekte" abzufragen, aber da es viele "Hunde" gibt, denke ich, dass es besser wäre, auf sie bei der Objektinitialisierung nicht zuzugreifen.
Für jetzt sind das die Lösungen, an die ich denken könnte:
1:
%Vor%2a:
%Vor%2b:
%Vor%3:
%Vor% Ich glaube nicht, dass "solution 1 " lazy geladen ist und wie in "solution 2 " wird owner
nicht automatisch aktualisiert "Dies sollte jedoch kein Problem sein, da in meinem Fall ein Dog
den Besitzer niemals ändern wird.
Was würden Sie empfehlen, eine einzelne umgekehrte Beziehung in Swift zu haben?
Der einzige Weg ist 3 . Weder 1 noch 2a, 2b funktionieren nicht.
Weil zur Zeit LinkingObjects
nur verwendet werden kann, um eine Eigenschaft vom Typ LinkingObjects zu initialisieren. Realm liest Klassendefinitionen und alle Eigenschaften beim Initialisieren, um ein Datenschema zu definieren. Im Code von 1 wird die Eigenschaft owner
nur als Person
Eigenschaft behandelt.
2a und 2b funktionieren auch nicht. Weil Realm lazy
-Eigenschaften nicht unterstützt. Auch 2b verwendet LinkingObjects
auf die falsche Weise wie 1 .
Also funktioniert nur 3 wie erwartet.
Siehe auch ... Ссылка
Tags und Links ios swift realm lazy-loading