Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Class init with many properties

I am learning Swift and I am currently going over initializers. I created a test project with a simple inheritance classes relationship. I set 10 properties to each class and all works fine. However, I feel that I am missing something, it just looks way too long and messy (specially ClassB init), any clues of shorting my code yet keeping it kosher?

ClassA:

class ClassA: NSObject {

var a1: Int
var a2: Int
var a3: Int
var a4: Int
var a5: Int
var a6: Int
var a7: Int
var a8: Int
var a9: Int
var a10: Int

init (a1: Int, a2: Int, a3: Int, a4: Int, a5: Int, a6: Int, a7: Int, a8: Int, a9: Int, a10: Int) {
    self.a1 = a1
    self.a2 = a2
    self.a3 = a3
    self.a4 = a4
    self.a5 = a5
    self.a6 = a6
    self.a7 = a7
    self.a8 = a8
    self.a9 = a9
    self.a10 = a10
}
}

ClassB:

class ClassB: ClassA {

var b1: Int
var b2: Int
var b3: Int
var b4: Int
var b5: Int
var b6: Int
var b7: Int
var b8: Int
var b9: Int
var b10: Int

init (a1: Int, a2: Int, a3: Int, a4: Int, a5: Int, a6: Int, a7: Int, a8: Int, a9: Int, a10: Int, b1: Int, b2: Int, b3: Int, b4: Int, b5: Int, b6: Int, b7: Int, b8: Int, b9: Int, b10: Int) {
    self.b1 = b1
    self.b2 = b2
    self.b3 = b3
    self.b4 = b4
    self.b5 = b5
    self.b6 = b6
    self.b7 = b7
    self.b8 = b8
    self.b9 = b9
    self.b10 = b10
    super.init(a1: a1, a2: a2, a3: a3, a4: a4, a5: a5, a6: a6, a7: a7, a8: a8, a9: a9, a10: a10)
}
}
like image 626
Roy K Avatar asked Apr 23 '26 10:04

Roy K


2 Answers

A possible solution would be to use structs and protocols instead of classes and inheritance. In Swift, using struct create default initialisers for you.

The code is not that shorter but you don't need to write init() anymore:

protocol A {
    var a1: Int { get set }
    var a2: Int { get set }
    var a3: Int { get set }
    var a4: Int { get set }
    var a5: Int { get set }
    var a6: Int { get set }
    var a7: Int { get set }
    var a8: Int { get set }
    var a9: Int { get set }
    var a10: Int { get set }
}

struct B: A {
    var a1: Int
    var a2: Int
    var a3: Int
    var a4: Int
    var a5: Int
    var a6: Int
    var a7: Int
    var a8: Int
    var a9: Int
    var a10: Int

    var b1: Int
    var b2: Int
    var b3: Int
    var b4: Int
    var b5: Int
    var b6: Int
    var b7: Int
    var b8: Int
    var b9: Int
    var b10: Int
}
like image 196
Gustanas Avatar answered Apr 26 '26 01:04

Gustanas


No you cannot shorten anything in this code.

like image 41
Mate Hegedus Avatar answered Apr 26 '26 01:04

Mate Hegedus



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!