一个超类的数组是否也包含子类?

Cas*_*ert 2 ios swift

我创建了一个类Person.人员包含姓名和电子邮件等属性.两者都来自类型String.

除了Person类之外,我还有一个Student继承自超类的子类Person.子类Student包含学生编号(String)和isGraduated(Boolean)等属性.

我班上有一大群人Person,比如:

var persons: [Person]()

在我在数组人员中创建Person和Student对象后,我使用a读出它们UITableView.两种型号都将在细胞中打印.但是当我想从所选行检查isGraduated的值时,自动完成不会给我属性的值:persons.isGraduated.

这个问题的第一个想法是,我的persons数组是否也包含子类Student?我的第二个想法是,我认为我不应该检查TableView中的值isGraduated.我希望这个功能是它会做一些事情,比如如果这个人毕业就打电话给原生相机.

期待解决方案.

ale*_*los 5

树选项在这里

答:将数组类型更改为Student

var students: [Student]()
Run Code Online (Sandbox Code Playgroud)

B:将人员阵列中的每个元素投射到学生.理想情况下,每个人都在里面.

guard let student = person as? Student else{
     return // or continue if inside a for loop
}
Run Code Online (Sandbox Code Playgroud)

然后你将有权访问该学生变量.

C:或者如果他们可能同时是阵列中的学生和人

for person in persons{
   switch person{
   case let student as Student:  //student case
      //do something
   default: //person case
      //do something 
   }
}
Run Code Online (Sandbox Code Playgroud)