我有一个各种类型的对象和一个数组类型的对象。对于每个对象,我想迭代类型数组并查看对象是否是该类型。类似这样的:检查一个对象是否是Swift中的类元类型的一个实例
class Parent {}
class ChildA: Parent {}
class ChildB: Parent {}
class GrandChildA: ChildA {}
var objects: [Any] = ["foo", ChildA(), ChildA(), ChildB(), GrandChildA()]
var classes = [Parent, ChildA, ChildB] // This line doesn't compile!!
for obj in objects {
for cls in classes {
if obj is cls {
NSLog("obj matches type!")
}
}
}
这不起作用,因为您不能将类存储在数组中。据我了解,你可以店类类型如ChildA.self
:
ChildA().dynamicType == ChildA.self // true
但这不处理子类:
ChildA().dynamicType == Parent.self // false
显然is
运营商解决了子类情况:
ChildA() is Parent // true
但是,如果我想使用is
,我不知道如何将类类型存储在一个数组中。
我可以用Swift和一些反射巫术来完成我想要的吗?
对不起,如果标题误导 - 我不明白这足以形成一个适当的问题。
比较https://stackoverflow.com/ q/44874126/2976878 – Hamish
@Hamish:你的回答非常好!如果您在此提交答案,我很乐意接受。 –
很高兴你发现它很有用!在这种情况下,可能会接近作为复制 – Hamish