Vad är RealmOptional och hur man lagrar Swift valfri Atomegendom
hur Beräknad egenskap fungerar som övergående egenskap i realm
hur man gör indexering för prestationsförstärkning
Vad är länkande objekt i Realm
komplexa predikatfrågor
crud operation
vad är live resultat i Realm
saker undviks när Ändra Realm Objects
Realm är en plattformsoberoende mobil objektdatabas. Det är mycket snabb, performant och lätt att använda jämfört med kärndata och Sqlite. Den använder sin lagringsmekanism för att lagra objekt som JSON på disk jämfört med kärndata som använder Sqlite som backend. Det är skrivet i plattformsoberoende C++ så det fungerar exakt på samma sätt på Android, iOS, macOS eller någon annan plattform.
det mesta av Realm är öppen källkod, men den hemliga såsen bakom Realms plattform är Core DB-motorn skriven från början i C++. RealmSwift är ett omslag runt Objective-C Realm framework och Objective-C Realm framework är ett omslag runt Realm Core DB engine.
komma igång
i den här handledningen kommer vi att arbeta med dessa modeller som visas i Figur 1
användar ~ ~ POS=TRUNC det är en modell innehåller användarinformation där userId det är primärt. Det har också en till en relation med passmodell och till många relationer med Todo-uppgifter. (Användaren kan bara ha pass och har många todo-uppgifter)
Passportar det är en modell som innehåller passinformation för en användare och har också en omvänd länk till User objekt.
todo Brasilian det är en modell som innehåller uppgifter för en användare och har också en omvänd länk till User objekt.
användarmodell
som visas i Figur 2 skapade vi användarmodell och lägger till några egenskaper:
först ärver vi User klass från Object vilket gör det Realm Object. Realmobjekt är i grunden en standard datamodell, precis som alla andra standarddatamodeller som du har definierat i dina appar. Den enda skillnaden är att de stöds av Realm uthållighet och förmågor. Genom att titta på alla Object class Realm kan härleda ditt schema. Varje modell du vill fortsätta måste du ärva från Objektklass.
firstName lagrar användarens förnamn som String. Eftersom RealmSwift är ett omslag runt Objective-C Realm framework-typerna som String, Date och Data är underklasser av NSObject i Objective-C, så du kan också överväga dem objekttyper i Swift. Utöver detta betyder @objc att du vill ha din Swift-kod (klass, metod, egendom etc.) för att vara synlig från Objective-C medan dynamic innebär att du vill använda Objective-C dynamic dispatch. För att göra enkla swift objekt butiker i databasen rike använder Objective – C dynamisk dispatch funktion för att göra arbete under huven
userId lagrar användar-id som fungerar som en primärnyckel. Du kan ställa in en av objektets egenskaper som primärnyckel. Vanligtvis, egendom som unikt identifierar sig, det är en primär kandidat för en primärnyckel. Det hjälper dig en snabb sökning eller redigera objekt i en databas. Som visas i Figur 2 gör vi userId primärnyckel genom att åsidosätta primarykey statisk funktion. Standardimplementeringen av denna metod returnerar noll. Obs userId fungerar som en objektiv c primitiv int-typ eftersom det är en omslag runt Objective C Realm
passport egenskapen lagrar användarpassinformationen som är ett annat Realm-objekt. Vi skapade en relation med Passmodellen. Till – en relation / objektlänk, där ett realmobjekt pekar på ett annat realmobjekt. När du skapar en relation med ett annat Realm-objekt måste dess egenskap vara av valfri typ. I passvariabelpekarreferens för Passport objektet kommer att lagra
privateUserType är wrapper-egenskapen för UserType eftersom UserType är swift enum kan vi inte lagra direkt på Realm. Alla dess ärendevärden skulle ha ett implicit tilldelat råvärde som matchar ärendets namn. Du använder detta raw-värde för att fortsätta enum-alternativen som Int I Realm. Men klienten har tillgång till beräknad enum-egendom och under huven lagras enum raw-värde/atomvärde i databasen som inte är synlig för klienten.
sträng -, nsdate-och nsdata-egenskaper kan deklareras som valfria eller icke-valfria med hjälp av Standard Swift-syntaxen.Valfria numeriska typer deklareras med RealmOptional. Eftersom RealmSwift är omslag runt Objective C Realm och det finns ingen valfri Int i Objective C det är därför Realm skapade det är typ RealmOptional för detta scenarier. Alla mål C primitiv typ kräver i Swift med tillval måste du använda RealmOptional . Obs!: RealmOptional egenskaper kan inte deklareras som dynamiska och @objc sökord eftersom generiska egenskaper inte kan representeras i Objective C runtime, som används för dynamisk avsändning av dynamiska egenskaper, och bör alltid deklareras med let. Eftersom det är Realm-klass har det alla funktioner som Realm persistent object har. Som visas i Figur 2 isEmailSubscriptionEnable vi deklarerar som RealmOptional Bool betyder att det kan vara noll vi använde med let eftersom det är en referenstyp och vi vill inte att adressen ska ändras i framtiden.
som visas i Figur 2 kan användaren ha många todos som är en samling av Realm Todo-objekt . Lista som Realm-klass för att hålla samling av Realm-Objektinstanser. Vi skapade många relationer med todo-modellen. Till-många förhållanden, där ett rike objekt pekar på samling av Rike objekt. Om du använder normal Swift array för att lagra Realm-samling av objekt får du undantag. Obs: som RealmOptional listan kan inte deklareras som dynamisk och @objc sökord eftersom dess en Realm klass med alla inbyggda funktioner. Listan liknar mycket Array för inbyggda metoder och åtkomst till objekt med indexerad prenumeration. Listan som du ser skrivs och alla objekt ska vara av samma typ
isUserHasTodos är en beräknad swift-egenskap och kommer inte att lagras i realm-databasen som returnerar om användaren har några uppgifter att göra eller inte.
slutligen gör vi userId och firstName som indexerade egenskaper. Genom att åsidosätta indexedProperties statisk metod tillhandahåller vi en rad egenskaper i strängform. Vi indexeras på Egenskaper för att förbättra åtkomsttiderna när du filtrerar eller frågar databasen