Realm Mobile Database Tutorial - How to Build Better Apps, Faster
Over 1 billion users rely on Realm
Trusted by Fortune 500 mainstays, innovative startups, and #1‑ranked app store successes, Realm is built into apps used by hundreds of millions of people every day.
-
Realm Sync Engine
-
Automatic two-way data synchronization and conflict resolution.
-
-
Realm Object Store
-
Persist and manage data as objects mirrored on mobile devices.
-
-
Dashboard
-
Monitor and manage your entire system at a glance.
-
-
Realm Event Framework
-
Trigger server-side events in response to data changes.
-
-
Realm Authentication System
-
Identify users with prebuilt mechanism or use your own.
-
-
Realm Access Control
-
Grant users the permissions they need for reading and writing data.
-
-
Realm Mobile Database
-
Embedded object database for mobile apps. Realm Mobile Platform extensions allow synchronization of live objects with Realm Object Server.
-
Sync available for Realm Java, Realm Objective‑C & Realm Swift. Coming soon for Realm React Native & Realm Xamarin.
-
-
Realtime collaboration
-
Create realtime collaboration experiences, similar to Google Docs.
-
-
Two-way data sync
-
Realtime data synchronization with automatic conflict resolution.
-
-
Data push
-
Update client databases effortlessly with automated data push.
-
-
Messaging
-
Share text, images, maps, or custom data. No server work needed.
-
-
API bridge
-
Easily connect your mobile apps to existing system and APIs.
-
-
Presence
-
Know when users are online and track state.
-
-
Install CocoaPods 1.1.0 or later.
-
Run pod repo update to make CocoaPods aware of the latest available Realm versions.
-
In your Podfile, add use_frameworks! and pod 'RealmSwift' to your main and test targets.
-
From the command line, run pod install.
-
Use the .xcworkspace file generated by CocoaPods to work on your project!
platform :ios, ‘9.0’ use_frameworks! target 'MyApp' do pod 'RealmSwift' end
import RealmSwift class Person: Object { @objc dynamic var id = 0 @objc dynamic var name = "" @objc dynamic var email = "" /** Override Object.primaryKey() to set the model’s primary key. Declaring a primary key allows objects to be looked up and updated efficiently and enforces uniqueness for each value. */ override static func primaryKey() -> String? { return "id" } convenience init(id: Int, name: String, email: String) { self.init() self.id = id self.name = name self.email = email } }
import RealmSwift class RealmManager { let realm = try! Realm() /** Delete local database */ func deleteDatabase() { try! realm.write({ realm.deleteAll() }) } /** Save array of objects to database */ func saveObjects(objs: [Object]) { try! realm.write({ // If update = true, objects that are already in the Realm will be // updated instead of added a new. realm.add(objs, update: true) }) } /** Returs an array as Results<Object>? */ func getObjects(type: Object.Type) -> Results<Object>? { return realm.objects(type) } }
class TestClass { let realm = RealmManager() var persons = [Person]() func testAll() { addTestPersons() // save persons array to database realm.saveObjects(objs: persons) // get persons array from database getObjects() } func addTestPersons() { for index in 0...9 { let newPerson = Person(id: index, name: "Name\(index)", email: "p\(index)@gmail.com") persons.append(newPerson) } } func getObjects() { if let objects = realm.getObjects(type: Person.self) { for element in objects { if let person = element as? Person { // Do whatever you like with 'person' object print("\(person.name), \(person.id), \(person.email)") } } } } }
In this scenario I only printed the result on Xcode console, but you can do whatever you want with the Person object, like to recreate the persons array to be shown in a table view.
Name0, 0, p0@gmail.com Name1, 1, p1@gmail.com Name2, 2, p2@gmail.com Name3, 3, p3@gmail.com Name4, 4, p4@gmail.com Name5, 5, p5@gmail.com Name6, 6, p6@gmail.com Name7, 7, p7@gmail.com Name8, 8, p8@gmail.com Name9, 9, p9@gmail.com