如何在Swift中传递泛型结构并获取其属性列表

jecbmhm3  于 2023-06-28  发布在  Swift
关注(0)|答案(1)|浏览(121)

我在我的项目中有多个结构,我需要从结构的属性列表。所以基本上我需要一个实用函数,我应该能够将结构体传递给它,并且该函数应该返回结构体中属性的字符串数组。

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)

但这会返回一个空数组。

xlpyo6sf

xlpyo6sf1#

我认为你的方法有一个打印错误。正确的版本应该是:

func propertyNames<T>(structure: T)  -> [String] {
    let mirror = Mirror(reflecting: structure)
    return mirror.children.compactMap{ $0.label }
}

以前,它镜像的是 type,而不是该类型的示例。它还匹配TestModel内部的实现。

相关问题