我正在构建一个函数,它将获取类对象的实例并将其转换为要发送到 Web 服务的 XML 请求。为了实现这一点,我使用镜像来迭代类中的键/值对。在我的测试中,我发现它工作得很好,但有一个主要问题,没有遇到任何继承的类参数。例如,在下面的代码中,对于“descriptionText,modelNumber和serialNumber,name和uuid从不收集”,循环执行了3次。有没有办法让我使用镜像并拾取基类的所有参数,如以及小部件?另外,如果有更好的方法来做到这一点,我洗耳恭听。
import UIKit
class BaseObject: NSObject {
var name = String()
var uuid = String()
}
class Widget: BaseObject {
var descriptionText = String()
var modelNumber = String()
var serialNumber = String()
}
var widget1 = Widget()
widget1.name = "Generic Widget"
widget1.uuid = "A guid"
widget1.descriptionText = "Class A Extra Larget Widget"
widget1.modelNumber = "1234"
widget1.serialNumber = "4321"
let widgetMirror = Mirror(reflecting: widget1)
for attr in widgetMirror.children {
print(attr.label!)
}
最佳答案
您需要使用 superclassMirror: Mirror?
属性。例如:
for attr in widgetMirror.superclassMirror!.children {
print(attr.label!)
}
打印预期结果:
name
uuid
更新。如果您不断遇到此问题,请将此Mirror
扩展添加到您的工具包中:
extension Mirror {
var allChildren: [Mirror.Child] {
var allChildren: [Mirror.Child] = []
var mirror: Mirror! = self
repeat {
allChildren.append(contentsOf: mirror.children)
mirror = mirror.superclassMirror
} while mirror != nil
return allChildren
}
}
用法:
for attr in widgetMirror.allChildren {
print(attr.label!)
}
关于swift - 镜像未在 Swift 3 上获取基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812681/