Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get list of class properties in Swift 4?

Tags:

swift

func getAllPropertyName(_ aClass : AnyClass) -> [String] {
    var count = UInt32()
    let properties = class_copyPropertyList(aClass, &count)
    var propertyNames = [String]()
    let intCount = Int(count)
    for i in 0 ..< intCount {
        let property : objc_property_t = properties![i]!
        guard let propertyName = NSString(utf8String:   property_getName(property)) as? String else {
            debugPrint("Couldn't unwrap property name for \(property)")
            break
        }
        propertyNames.append(propertyName)
    }
    free(properties)
    return propertyNames

This code work till Swift 3.2. But I'm using Swift 4 and it's giving me an empty Array[String].

like image 523
Ravindra Kumar Sonkar Avatar asked Oct 10 '17 20:10

Ravindra Kumar Sonkar


2 Answers

You can get `properties like below :

class ClassTest {
    var prop1: String?
    var prop2: Bool?
    var prop3: Int?
}

let mirror = Mirror(reflecting: ClassTest())
print(mirror.children.flatMap { $0.label }) // ["prop1", "prop2", "prop3"]
like image 107
Vini App Avatar answered Sep 21 '22 18:09

Vini App


You can use this:

extension NSObject {
    func propertyNames() -> [String] {
        let mirror = Mirror(reflecting: self)
        return mirror.children.compactMap{ $0.label }
    }
}
like image 37
Zaldy Bughaw Avatar answered Sep 19 '22 18:09

Zaldy Bughaw