我创建了一个班级Person
。人员包含姓名和电子邮件等属性。两者都来自String
类型。
在Person
类旁边,我有一个继承自超类Student
的子类Person
。子类Student
包含学生编号(String
)和isGraduated(Boolean
)等属性。
我有一个来自班级Person
的空数组,例如:
var persons: [Person]()
在数组人员中创建Person和Student对象后,我使用UITableView
读出它们。两种型号都将在细胞中打印。但是当我想从所选行检查isGraduated的值时,自动完成不会给我属性的值:persons.isGraduated
。
首先想到这个问题的是,我的persons
数组是否也包含子类Student
?我的第二个想法是,我认为我不应该检查TableView中的值isGraduated。我希望这个功能是它可以做一些事情,比如如果这个人毕业就打电话给原生相机。
期待解决方案。
答案 0 :(得分:5)
树选项
答:将数组类型更改为学生
var students: [Student]()
B:将人员阵列中的每个元素投射到学生。理想情况下,每个人都在里面。
guard let student = person as? Student else{
return // or continue if inside a for loop
}
然后你将可以访问该学生变量。
C:或者如果他们可能同时是阵列中的学生和人员那么for person in persons{
switch person{
case let student as Student: //student case
//do something
default: //person case
//do something
}
}
答案 1 :(得分:0)
如果您想查看您的人的类型:您可以使用is
关键字的人或学生:
if persons[0] is Person {
//if a person
} else if persons[0] is Student {
//if a student
}
如果您想为特定类型使用功能成员,则需要使用关键字as
向下转换该类型:
if let person = persons[0] as? Person {
//person is now a Person type
} else if let student = persons[0] as? Student {
//student is now a Student type
}