Swift 类init具有许多属性

Swift 类init具有许多属性,swift,inheritance,Swift,Inheritance,我正在学习Swift,目前正在学习初始化程序。我创建了一个带有简单继承类关系的测试项目。我为每个类设置了10个属性,所有的工作都很好。然而,我觉得我遗漏了一些东西,它看起来太长太乱了(特别是ClassB init),有没有缩短代码的线索 A类: 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 a

我正在学习Swift,目前正在学习初始化程序。我创建了一个带有简单继承类关系的测试项目。我为每个类设置了10个属性,所有的工作都很好。然而,我觉得我遗漏了一些东西,它看起来太长太乱了(特别是ClassB init),有没有缩短代码的线索

A类:

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
}
}
B类:

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)
}
}

不,您不能缩短此代码中的任何内容

几个选项:

  • 向成员添加默认值
  • 添加到您的子类中
  • 如果您的所有成员都来自同一类型,为什么不使用数组来存储它们呢

    • 不幸的是,几乎没有办法缩短代码。然而,假设您确实需要传入一组
      Int
      s,那么传入数组不是更简单吗?或者,如果不能使用数组,可以创建一个类来保存所有这些值,以便以更可读的方式将它们传递到函数中


      因为这是一个测试项目,也许这并不重要,但如果这是真正的代码,我不会接受。

      一个可能的解决方案是使用结构和协议,而不是类和继承。在Swift中,使用struct为您创建默认初始值设定项

      代码没有那么短,但您不再需要编写init():


      我知道我可以使用便利init并将所有参数放在一个参数中,但是我选择使用指定的init并有许多参数只是为了让我的示例更清楚。无论如何,很高兴知道我基本上没什么事可做:)谢谢!
      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
      }