Here is an extension for NSObject that will return the names of the properties in the object.
import Foundation
extension NSObject {
//
// Retrieves an array of property names found on the current object
// using Objective-C runtime functions for introspection:
// https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html
//
func propertyNames() -> Array<String> {
var results: Array<String> = [];
// retrieve the properties via the class_copyPropertyList function
var count: UInt32 = 0;
var myClass: AnyClass = self.classForCoder;
var properties = class_copyPropertyList(myClass, &count);
// iterate each objc_property_t struct
for var i: UInt32 = 0; i < count; i++ {
var property = properties[Int(i)];
// retrieve the property name by calling property_getName function
var cname = property_getName(property);
// covert the c string into a Swift string
var name = String.fromCString(cname);
results.append(name!);
}
// release objc_property_t structs
free(properties);
return results;
}
}
This extension makes use of the introspection functions in Objective-C to retreive the property struct and pluck out the names.
Usage is fairly simple:
var properties: Array<String> = myNSObj.propertyNames()
And it is a great utility for performing Key/Value operations.
var properties = someObj.propertyNames();
for property in properties {
var value: AnyObject? = someObj.valueForKey(property);
self.setValue(value, forKey: property)
}