我有一個各種類型的對象和一個數組類型的對象。對於每個對象,我想迭代類型數組並查看對象是否是該類型。類似這樣的:檢查一個對象是否是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