【问题标题】:Swift nested type in init functioninit 函数中的 Swift 嵌套类型
【发布时间】:2018-10-26 14:50:01
【问题描述】:

我有一个描述某些结构的嵌套类型对象:

class Car {
   class Electro {
       class 2WheelDrive {
       }
       class 4WheelDrive {
       }
   }
}

我想将该对象用作另一个对象的 init 函数中的参数,其签名如下:

init(car: Car)

但是,当我尝试使用 Car.Electro.4WheelDrive 参数调用这个初始化函数时,我得到一个错误:

“无法将“Car.Electro.4WheelDrive”类型的值转换为预期值 参数类型“汽车””。

除了init(car: Any) 之外,我应该使用哪个初始化函数签名才能使用Car.Electro.4WheelDrive 之类的参数?

【问题讨论】:

  • 显示实际代码,充分展示您的问题。
  • 嵌套类与使它们成为子类不同。如果要将其传递给需要 Car 参数的函数,则需要将其声明为 class Electro: Car

标签: swift


【解决方案1】:

您的代码创建了四个类:

  • 汽车
  • 汽车.电动
  • Car.Electro.2WheelDrive(我认为这不合法;它必须以字母开头)
  • Car.Electro.4WheelDrive

这些是不相关的类;它们唯一的共同点是一些命名空间。 Car.Electro 不是 Car 的子类。如果你想要它,你需要声明它。

您可能根本不想让这些嵌套。您可能打算将它们设为子类:

class Car {}
class ElectroCar: Car {}
class TwoWheelDriveElectroCar: ElectroCar {}
class FourWheelDriveElectroCar: ElectroCar {}

如果你愿意,当然仍然可以嵌套它们:

class Car {
   class Electro: Car {
       class TwoWheelDrive: Electro {
       }
       class FourWheelDrive: Electro {
       }
   }
}

这只是改变了他们的名字,而不是他们的关系。

【讨论】:

  • 感谢罗布,您的回答。由于我的单元测试中有一个不相关的问题,我认为继承不是我的特定情况的选择。但修复后,结果证明是最优解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2016-12-23
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
相关资源
最近更新 更多