【发布时间】:2017-07-03 11:46:25
【问题描述】:
我想不出一个好的标题。
如果我有一个 switch 语句来初始化一个类的子类,那么它不会让我使用子类的任何函数或变量。这就是我的意思:
class Animal {}
class Cat: Animal {}
class Dog: Animal {
func bark() {
print("SWIFT DOES NOT LET ME BARK")
}
}
enum AnimalType {
case cat, dog
}
func getAnimal(type: AnimalType) -> Animal {
let animal: Animal
switch type {
case .cat:
animal = Cat()
case .dog:
animal = Dog()
animal.bark() // Value of type 'Animal' has no member 'bark'
}
return animal
}
请发送帮助,我想解决办法太久了。
【问题讨论】:
-
你的意思是:这行不通。有错误吗?如果是这样,请发布错误。
-
@J.Paravicini 'Animal' 类型的值没有成员 'bark'...尽管很明显它被初始化为狗。
-
问题是你用“Animal”类型声明了animal值变量,即使你给它分配了一个“Dog”变量,它仍然是animal类型。您可以将其向下转换为 roght 变量
-
我没有真正看到使用
animal局部变量在这里 - 只是初始化并返回各自的case正文中的实例。