【发布时间】:2019-06-12 20:27:45
【问题描述】:
我正在学习使用类,现在我需要遍历具有不同类型的类数组并打印它们的属性。
当只有一个超类和几个子类时这不是问题,但是当我添加另一个超类和子类时出现问题。 xCode 告诉我将数组转换为 [Any] 并且我失去了丰富类属性的能力。
let human = People(name: "John Dou", height: 180, weight: 80, gender: "male") //every class inherits from class People this way
var peopleArray = [human, cook, manager, fighter] // this is an array of classes with type People
for person in peopleArray {
print(person.name, person.height, person.weight, person.gender)
person.say()
}
这个 for in 循环可以正常工作。
然后我创建了几个类,它们继承自 Marsian 类:
let marsian = Marsian(numberOfLegs: 1, planetOfBirth: "Mars")
然后我尝试将每个类的实例放入一个数组中:
let unitedRaceArray = [marsian, snikersian, twixian, austronaut, fighter, manager, cook, human]
但它显示了一个错误:“只能将异构集合文字推断为 '[Any]';如果这是故意的,请添加显式类型注释”
当然,对于 [Any] 类型,“for in”循环不起作用。
【问题讨论】:
-
我想说,在你的 for 循环中,你可以将每个项目转换为?人还是一样? Marsian 然后你可以访问它的属性
-
火星人,不是火星人。
-
铸造每个项目都有帮助,谢谢你,塞缪尔