//: To get this Playground running do the following: //: //: 1) In the scheme selector choose RealmSwift > iPhone 6s //: 2) Press Cmd + B //: 3) If the Playground didn't already run press the ▶︎ button at the bottom import Foundation import RealmSwift //: I. Define the data entities class Person: Object { dynamic var name = "" dynamic var age = 0 dynamic var spouse: Person? let cars = List() override var description: String { return "Person {\(name), \(age), \(spouse?.name)}" } } class Car: Object { dynamic var brand = "" dynamic var name: String? dynamic var year = 0 override var description: String { return "Car {\(brand), \(name), \(year)}" } } //: II. Init the realm file let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "TemporaryRealm")) //: III. Create the objects let car1 = Car(value: ["brand": "BMW", "year": 1980]) let car2 = Car() car2.brand = "DeLorean" car2.name = "Outatime" car2.year = 1981 // people let wife = Person() wife.name = "Jennifer" wife.cars.append(objectsIn: [car1, car2]) wife.age = 47 let husband = Person(value: [ "name": "Marty", "age": 47, "spouse": wife ]) wife.spouse = husband //: IV. Write objects to the realm try! realm.write { realm.add(husband) } //: V. Read objects back from the realm let favorites = ["Jennifer"] let favoritePeopleWithSpousesAndCars = realm.objects(Person.self) .filter("cars.@count > 1 && spouse != nil && name IN %@", favorites) .sorted(byProperty: "age") for person in favoritePeopleWithSpousesAndCars { person.name person.age guard let car = person.cars.first else { continue } car.name car.brand //: VI. Update objects try! realm.write { car.year += 1 } car.year } //: VII. Delete objects try! realm.write { realm.deleteAll() } realm.objects(Person.self).count //: Thanks! To learn more about Realm go to https://realm.io