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 嵌套类型的主要内容,如果未能解决你的问题,请参考以下文章