【发布时间】:2016-12-31 01:48:18
【问题描述】:
我有一个不同类型的对象数组和一个类型数组。对于每个对象,我想遍历类型数组并查看对象是否是该类型。像这样的:
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 和一些反射巫术以某种方式完成我想要的吗?
对不起,如果标题具有误导性 - 我理解得不够好,无法提出正确的问题。
【问题讨论】:
-
@Hamish:你的回答很棒!如果您在此处将其作为答案提交,我很乐意接受。
-
很高兴您发现它很有用!在这种情况下可能会像一个骗子一样接近
标签: swift class reflection swift2 instance