反射 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 - 多个位掩码产生错误