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




