hvad er RealmOptional og hvordan man gemmer hurtig valgfri atomisk ejendom
hvordan beregnet ejendom fungerer som forbigående ejendom i realm
sådan gør indeksering for ydeevne gevinst
hvad er linking objekt i realm
komplekse prædikat forespørgsler
crud operation
hvad er live resultater i realm
Ting undgås, når Rediger Realm objekter
Realm er en cross-platform mobil objekt database. Det er meget hurtigt, effektivt og nemt at bruge i forhold til kernedata. Det bruger sin lagringsmekanisme til at gemme objekt som JSON på disken sammenlignet med kernedata, der bruger som backend. Det er skrevet i C++ på tværs af platforme, så det fungerer nøjagtigt på samme måde på Android, iOS, macOS eller enhver anden platform.
det meste af Realm er open source, men den hemmelige sauce bag Realms platform er kernen DB motor skrevet fra bunden i C++. Realm er en indpakning omkring Objective-C Realm-rammen, og Objective-C Realm-rammen er en indpakning omkring Realm Core DB-motor.
Kom godt i gang
i denne tutorial vil vi arbejde på disse modeller, som vist i Figur 1
user Price det er en model indeholder brugeroplysninger, hvor userId det er primært. Det har også en til-en forhold til pas model og til-mange relationer med Todo Opgaver. (Bruger kan kun have pas og har mange todo-Opgaver)
Passportkrus det er en model, der indeholder pasoplysninger fra en bruger og har også et omvendt link til User objekt.
Todo Kurt det er en model, der indeholder en brugers opgaver og har også et omvendt link tilUser objekt.
brugermodel
som vist i figur 2 oprettede vi brugermodel og tilføjer et par egenskaber:
først arver vi User klasse fra Object hvilket gør det Realm Object. Realm-objekter er dybest set en standarddatamodel, ligesom enhver anden standarddatamodel, du har defineret i dine apps. Den eneste forskel er, at de er bakket op af Realm Persistens og evner. Ved at undersøge alle Object klasse Rige er i stand til at udlede dit skema. Hver model, du vil fortsætte, skal du arve fra objektklasse.
firstNamegemmer brugerens fornavn somString. Da RealmSwift er en indpakning omkring Objective-C Realm rammetyper som streng, dato og Data er underklasser af NSObject i Objective-C, så du kan også overveje dem objekttyper hurtigt. Ud over dette @objc betyder, at du vil have din hurtige kode (klasse, metode, ejendom osv.) at være synlig fra Objective-C, mens dynamic betyder, at du vil bruge Objective-C dynamic dispatch. For at lave enkle hurtige objektbutikker i databaseområdet bruger Objective-C dynamic dispatch-funktion til at udføre arbejde under hætten
userId gemmer bruger-id ‘ et, der fungerer som en primær nøgle. Du kan indstille et af objektets egenskaber som dets primære nøgle. Som regel, ejendom, der entydigt identificerer sig selv, der er en primær kandidat til en primær nøgle. Det hjælper dig en hurtig opslag eller redigere objekt i en database. Som vist i figur 2 laver vi userId primær nøgle ved at tilsidesætte primarykey statisk funktion. Standardimplementeringen af denne metode returnerer nul. Bemærk userId fungerer som en objektiv C primitiv int-type, da det er en indpakning omkring Objective C Realm
passport ejendom gemmer brugerens pasoplysninger, som er et andet Realm-objekt. Vi skabte to-One forhold til pasmodellen. To-one relationship / object link , hvor et realm objekt peger på et andet realm objekt. Når du opretter en relation til et andet Realm-objekt, skal dets egenskab være af en valgfri type. I Pas variabel pointer reference af Passport objekt vil gemme
privateUserTypeer indpakningsegenskaben for UserType da UserType er hurtig enum, kan vi ikke gemme direkte på Realm. Alle dens sagsværdier ville have en implicit tildelt rå værdi, der matcher sagens navn. Du bruger denne rå værdi til at fortsætte enum-indstillingerne som Int i Realm. Men klienten har adgang til beregnet enum-ejendom, og under hætten lagrer enum rå værdi/atomværdi i databasen, som ikke er synlig for klienten.egenskaber for streng, Nsdate og NSData kan erklæres som valgfri eller ikke-valgfri ved hjælp af standard hurtig syntaks.Valgfrie numeriske typer erklæres ved hjælp af RealmOptional. Da Realm er indpakning omkring Objective C Realm, og der ikke er nogen valgfri Int i Objective C, er det derfor, at Realm skabte det Type RealmOptional for disse scenarier. Al den objektive C primitive type kræver hurtig med valgfri, du skal bruge RealmOptional . Bemærk: RealmOptional egenskaber kan ikke deklareres som dynamisk og @objc søgeord, fordi generiske egenskaber ikke kan repræsenteres i Objective C runtime, som bruges til dynamisk afsendelse af dynamiske egenskaber, og bør altid deklareres med let. Da det er Realm class, har det alle funktioner, som Realm persistent object har. Som vist i figur 2 isEmailSubscriptionEnable Vi erklærer som RealmOptional Bool betyder, at det kan være nul, vi brugte med let, da det er en referencetype, og vi ønsker ikke, at adressen skal ændres i fremtiden.
som vist i figur 2 Bruger kan have mange todos, som er en samling af Realm Todo objekter . Liste som Realm klasse til at holde samling af Realm objekt forekomster. Vi skabte to-mange forhold til Todo-modellen. Til-mange forhold, hvor et rige objekt peger på samling af rige objekt. Hvis du bruger normal hurtig array til at gemme Realm samling af objekt vil du få undtagelse. Bemærk: ligesom RealmOptional liste kan ikke erklæres som dynamisk og @objc søgeord, da det er en Realm klasse med alle de indbyggede funktioner. Liste ligner meget Array for indbyggede metoder og adgang til objekter ved hjælp af indekseret abonnement. Liste som du ser er skrevet, og alle objekter skal være af samme type
isUserHasTodos er en beregnet hurtig egenskab og vil ikke gemme i realm database, som vender tilbage, hvis brugeren har nogle opgaver at gøre eller ej.
endelig laver vi userIdog firstName som indekserede egenskaber. Ved at tilsidesætte indexedProperties statisk metode leverer vi en række egenskaber i strengform. Vi indekserer ejendomme for at forbedre adgangstiderne, når vi filtrerer eller forespørger databasen