Ballcap-iOS icon indicating copy to clipboard operation
Ballcap-iOS copied to clipboard

Allow initialization of Object subclasses with models

Open scottfister opened this issue 4 years ago • 0 comments

Is your feature request related to a problem? Please describe. Model's of Object subclasses require empty init methods:

class User: Object, DataRepresentable {
    var data: Model?
    
    struct Model: Modelable, Codable {
        let id: String
        let firstName: String
        let lastName: String
        
        init() {
            self.id = ""
            self.firstName = ""
            self.lastName = ""
        }
        
        init(id: String, firstName: String, lastName: String) {
            self.id = id
            self.firstName = firstName
            self.lastName = lastName
        }
    }
}

And when used require doing a little dance with initializing separately and assigning:

let user = User()
let model = User.Model(id: userId,
                           firstName: firstName,
                           lastName: lastName)
user.data = model
user.save()

This is un-ideal as you need to write so much repetitive boilerplate for every Object subclass, and you can forget to assign the model to object.data.

Describe the solution you'd like When initializing an instance of a subclass of Object it would be great if we required the data model to be provided along with it:

let model = User.Model(id: userId,
                           firstName: firstName,
                           lastName: lastName)
let user = User(data: model)
user.save()

Which would enable us to simplify the model blueprint to:

class User: Object, DataRepresentable {
    var data: Model?
    
    struct Model: Modelable, Codable {
        let id: String
        let firstName: String
        let lastName: String
    }
}

Describe alternatives you've considered I listed the alternative route I'm using above.

Additional context I'd be happy to help develop this if you think it would be a worthwhile feature.

scottfister avatar May 08 '20 03:05 scottfister