init 函数中的 Swift 嵌套类型

Posted

技术标签:

【中文标题】init 函数中的 Swift 嵌套类型【英文标题】:Swift nested type in init function 【发布时间】: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 【参考方案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 
       
   

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

【讨论】:

感谢罗布,您的回答。由于我的单元测试中有一个不相关的问题,我认为继承不是我的特定情况的选择。但修复后,结果证明是最优解。

以上是关于init 函数中的 Swift 嵌套类型的主要内容,如果未能解决你的问题,请参考以下文章

具有覆盖函数的嵌套类的编译器错误 - Swift Xcode6

Swift 中的高阶函数和函数嵌套

Swift学习:嵌套类型

swift 学习- 22 -- 嵌套类型

Swift中的嵌套函数意外行为?

swift 3中的嵌套函数