猜测Swift类型别名机制是自动初始化器继承

时间:2016-07-10 19:41:08

标签: swift initialization type-alias

问题突然出现在我脑海中,当我定义一个Swift类型的别名时会发生什么?它背后的机制是什么?直到我从Swift官方文档中学习了自动初始化程序继承章节:

  

如果您的子类没有定义任何指定的初始值设定项,它会自动继承其所有超类指定的初始值设定项

这是我的学习练习代码​​

class Vehicle{
    var numberOfWheels = 0
    var description: String {
        return "\(numberOfWheels) wheel(s)"
    }
}

class Auto: Vehicle{}

let VM = Auto()
VM.numberOfWheels

哇!这工作,至少执行,与Swift类型别名完全相同。 自动车辆

类型的别名

问题:我明白了吗?这是类型别名背后的机制。

2 个答案:

答案 0 :(得分:2)

问题:我明白了吗?这是类型别名背后的机制。

不,类型化和子类化(继承所有方法和初始化器)是不同的东西,并且基于不同的语义和机制。

let v1 = Vehicle()
v1 is Auto //->false

typealias Norimono = Vehicle
v1 is Norimono //->true (with warning "'is' test is always true)

最后一个结果(包括您可能会发现的警告)与v1 is Vehicle完全相同。

Typealias实际上是一个别名,它为同一类型提供了另一个名称。

另外,您可以定义结构或枚举的类型,您无法定义继承的类(类型)。

答案 1 :(得分:1)

不是真的,但如果你从未见过面向对象的编程,他们看起来有点相似,我同意。

Auto扩展原始工具的子类,可以向Vehicle添加其他属性和方法,即使在该示例中它不执行此操作也是如此。

AutoVehicle不是一回事,Vehicle是基本类型而且Auto是其子类型之一,您可以使用{ {1}}您可以使用Vehicle,但反之亦然。

一个typealias只是一个别名,一种为预先存在的类型提供额外“名称”的方法,就是这样。一个类型和他的别名是一回事。