确定数组<any>的元素是否来自NSObject

时间:2017-01-19 18:05:10

标签: objective-c swift

我的数组包含不同类型的Any,即Array<Any>。现在,我发送这个数组并迭代它。此数组中从NSObject下降的所有元素都必须被包装。

但是,如果元素来自NSObject

,我不确定如何判断
  1. 我在这里看到了这个答案How to tell if a Class inherits from NSObject (Objective-C) - 但是,我担心,它会导致纯Swift对象的运行时错误。

  2. 我也尝试了isKindOfClass,但在所有情况下,似乎都会返回true,对于所有类型的元素,例如Int,{{1} },Dictionary

  3. 下面是数组及其类型的外观。 HelloTest继承自NSObject

    This is how array and its type look. HelloTest inherit from NSObject

    PS

    1. 我要在Objective-C

    2. 中编写此代码
    3. 我已将此数组从Mirror代码遍历到Swift代码,因此,我可以在此数组中拥有所有类型的Swift对象。

2 个答案:

答案 0 :(得分:2)

您可以在Swift中使用可选绑定

for obj in array {
    if let obj = obj as NSObject {
        //Do something
    }
}

修改

对于Objective-C中的Arrays / NSArray,基本上所有对象都从NSObject继承或符合NSObject协议,因此isKindOfClass:NSObject基本上都是真的。

答案 1 :(得分:-1)

数组可能只包含对象。你不会在数组中找到一个解包的东西,所有包装类型(NSNumberNSValue等),如几乎所有其他都来自{{ 1}}。

所以,为了告诉你有什么,你需要一个更具体的问题,比如你期望找到的包装器的分离,或者自定义对象的分离(例如镜像)