我在我的项目中有多个结构,我需要从结构的属性列表。所以基本上我需要一个实用函数,我应该能够将结构体传递给它,并且该函数应该返回结构体中属性的字符串数组。
struct TestModel: Codable {
let id: Int
let secondsSinceEpoch: Int
init(id: Int, secondsSinceEpoch: Int) {
self.id = id
self.secondsSinceEpoch = secondsSinceEpoch
}
func propertyNames() -> [String] {
let mirror = Mirror(reflecting: self)
return mirror.children.compactMap{ $0.label }
}
}
在这里,我使用函数propertyNames()
从TestModel
获取属性名。
let propertyList = TestModel(id: 1, secondsSinceEpoch: 2).propertyNames()
类似地,我需要一个类似这样的泛型函数。
func propertyNames<T>(structure: T) -> [String] {
let mirror = Mirror(reflecting: T.self)
return mirror.children.compactMap{ $0.label }
}
我应该能够传递任何结构来获取属性列表。
let propertyList = propertyNames(structure: TestModel.self)
但这会返回一个空数组。
1条答案
按热度按时间xlpyo6sf1#
我认为你的方法有一个打印错误。正确的版本应该是:
以前,它镜像的是 type,而不是该类型的示例。它还匹配
TestModel
内部的实现。