You can use the standard <objc/runtime.h>
functions:
class MyObject {
dynamic var identifier = 0
func dynamicProperties() -> [String] {
var dynamicProperties = [String]()
var propertyCount = UInt32(0)
let properties = class_copyPropertyList(object_getClass(self), &propertyCount)
for var i = 0; i < Int(propertyCount); i++ {
let property = properties[i]
let propertyName = property_getName(property)
dynamicProperties.append(String(CString: propertyName, encoding: NSUTF8StringEncoding)!)
}
free(properties)
return dynamicProperties
}
}
--
If you want subclasses to show not only their properties, but also those of its superclass, you can do the following:
class BaseClass {
dynamic var identifier = 0
func dynamicProperties() -> [String] {
var dynamicProperties = [String]()
var propertyCount = UInt32(0)
let properties = class_copyPropertyList(object_getClass(self), &propertyCount)
for var i = 0; i < Int(propertyCount); i++ {
let property = properties[i]
let propertyName = property_getName(property)
dynamicProperties.append(String(CString: propertyName, encoding: NSUTF8StringEncoding)!)
}
free(properties)
return dynamicProperties
}
}
class SubClass : BaseClass {
dynamic var name: String!
override func dynamicProperties() -> [String] {
var dynamicProperties = super.dynamicProperties()
var propertyCount = UInt32(0)
let properties = class_copyPropertyList(object_getClass(self), &propertyCount)
for var i = 0; i < Int(propertyCount); i++ {
let property = properties[i]
let propertyName = property_getName(property)
dynamicProperties.append(String(CString: propertyName, encoding: NSUTF8StringEncoding)!)
}
free(properties)
return dynamicProperties
}
}