反射 Swift 2.0 XCode 7 beta 5

Posted

技术标签:

【中文标题】反射 Swift 2.0 XCode 7 beta 5【英文标题】:Reflection Swift 2.0 XCode 7 beta 5 【发布时间】:2015-08-19 16:51:18 【问题描述】:

Apple 在 XCode 7 beta 5 中更改了 Swift 反射。全局 reflect() 函数消失了,你必须这样做:

let mirror = Mirror(reflecting: object)

它以更好的方式提供或多或少相同的信息(属性名和值不再使用 .1 og .2)。但是我找不到一种方法来探索镜像项是否是类的实例。 您可以检查以下较旧的实现:

reflectedProperty.1.objectIdentifier != nil || reflectedProperty.1.count > 0

但 objectIdentifier 似乎消失了,无论类型如何,计数始终为 2。

帮助任何人?

【问题讨论】:

【参考方案1】:

好的,所以我找到了解决方法。我正在迭代mirror.children.enumerate(),它似乎使所有类型的属性都为String。相反,我深入研究了 Apple 的初步文档,并读到将孩子“升级”到例如AnyRandomAccessCollection。这使得可以依靠对象子项的计数来确定它是否是一个对象(在测试它是否是一个数组之后)

如果您对代码感兴趣,目前我有一个功能强大的 Swift 类到 JSON 序列化器,在这里工作在这个要点上: https://gist.github.com/peheje/cc3618253d4f38ea4885

【讨论】:

【参考方案2】:

我不确定你是否在寻找这个,但以下的输出是“Class”

mirror.displayStyle

【讨论】:

以上是关于反射 Swift 2.0 XCode 7 beta 5的主要内容,如果未能解决你的问题,请参考以下文章

MR_importFromObject 方法在 XCode 7.1 beta (Swiftui 2.0) 中不起作用

Alamofire 2.0 编译器问题 - Swift 2 / Xcode 7

Swift 2/Xcode 7 beta - 多个位掩码产生错误

无法使用 Swift 2 在 Xcode 7 beta 中导入 FBSDK

Alamofire Swift-2.0 分支因错误而失败

在 XCode 6 beta 7 中从 Swift 在 iOS 中打印