Duy Khanh Nguyen
Duy Khanh Nguyen

Reputation: 55

How to create one Realm class from several other classes?

Good afternoon everyone,

Im currently working on a task that called "Bookmark". The short description is whenever i clicked the bookmark button, app will save the article and then display it in the BookmarkVC.

I have 3 types of object called "News", "Documents" and "ITSectionResult" and my idea is to create an object called "BookmarkItem" which contain element of 3 above objects and one property called bookmarkCategory to indicate type of objects, so that i can use it to display in BookmarkVC. I just want to work on only one realm object, so any one can help me an an idea to group these guys together?. Here i would attach my draft code as below:

For News class:

class NewsArticle:Object {
dynamic var title: String?
dynamic var body:String?
dynamic var category:String?
dynamic var createTime:String?
dynamic var image:String?
dynamic var id:String?

convenience init (title:String, body:String, category:String, 
image:String, id:String, createTime:String) {
    self.init()
    self.title = title
    self.body = body
    self.category = category
    self.image = image
    self.id = id
    self.createTime = createTime
 }

Document class:

class Documents {
var id: String?
var title:String?
var createTime:CLong?
var url:String?

init (title:String, id:String, createTime:CLong?, url:String) {
    self.title = title
    self.id = id
    self.createTime = createTime
    self.url = url
}

ITSectionResult class:

class SectionSearchResult {
var title:String?
var image:String?
var id:String?
var byCategory:String?

init (title:String, image:String, id:String, byCategory:String) {
    self.title = title
    self.image = image
    self.id = id
    self.byCategory = byCategory
}

and finally the drafting BookmarkItem class:

class BookmarkItem:Object {

//Category
dynamic var bookmarkCategory:BookMarkItemCategory?

dynamic var title: NewsArticle?
dynamic var body:NewsArticle?
dynamic var category:NewsArticle?
dynamic var createTime:NewsArticle?
dynamic var image:NewsArticle?
dynamic var id:NewsArticle?

dynamic var link:String?
dynamic var url:String?

}

class BookMarkItemCategory:Object {
dynamic var name = ""
}

Here i would remind that, the BookmarkItem class uses 3 major properties to display in the BookmarkVC, "image" for filter category type(example: book image for Documents object, newspaper icon for News object) , "title" for the title and the url for display in WebView. Thank you so much, and wish you guys have a good weekend ahead.

Upvotes: 0

Views: 465

Answers (1)

Willow Puge
Willow Puge

Reputation: 166

As mentioned above in the comments by EpicPandaForce, this can be achieved by not having a class for each type and instead use a unified model.

import RealmSwift

final class UnifiedModel: Object {
    dynamic var title: String = ""
    dynamic var id: String = ""
    dynamic var createTime: String = ""
    dynamic var category: String = ""
    dynamic var body: String?
    dynamic var image: String?

    override static func primaryKey() -> String {
        return "id"
    }
}

With the model I've shown above, every instance would need a title, id, create time and category while body and image could be left nil. Please feel free to follow-up if you have any other questions.

Disclaimer: I work for Realm.

Upvotes: 1

Related Questions