TIMEX
TIMEX

Reputation: 272094

In Swift, how can I quickly set my instance variables?

public class User {
    var id: Int
    var fb_id: String?
    var first_name: String?
    var last_name: String?
    var age: Int?
    var distance: Int?
    var login_at_pretty: String?
    var login_at: Int?
    var profile: Profile?
    init(id: Int, fb_id: String?, first_name: String?, last_name: String?, age: Int?, distance: Int?, login_at_pretty: String?, login_at: Int?, profile: Profile?){

        self.id = id
        if let fb_id = fb_id {
            self.fb_id = fb_id
        }
        if let first_name = first_name {
            self.first_name = first_name
        }
        if let last_name = last_name {
            self.last_name = last_name
        }
        if let age = age {
            self.age = age
        }
        if let distance = distance {
            self.distance = distance
        }
        if let login_at_pretty = login_at_pretty {
            self.login_at_pretty = login_at_pretty
        }
        if let login_at = login_at {
            self.login_at = login_at
        }
        if let profile = profile {
            self.profile = profile
        }
    }
}

Is this the quickest way to do it? I feel like I'm over typing.

Upvotes: 1

Views: 78

Answers (1)

Logan
Logan

Reputation: 53132

For your class, you're doing a lot of if-let statements that don't provide anything useful. ie:

   if let fb_id = fb_id {
        self.fb_id = fb_id
   }

fb_id and self.fb_id are optionals, so the binding isn't necessary. Just do:

self.fb_id = fb_id

On that note however, if you're not planning on subclassing, using a struct would provide a memberwise initializer automagically:

public struct User {
    var id: Int
    var fb_id: String?
    var first_name: String?
    var last_name: String?
    var age: Int?
    var distance: Int?
    var login_at_pretty: String?
    var login_at: Int?
    var profile: Profile?
}

Check out Memberwise Initializers for Structure Types in the swift docs

Upvotes: 7

Related Questions