Is there a way to get list of variables and function of a class?
For example: If my class is like below
class Person {
var age: Int!
var name: String!
func isOlder(from person: Person) -> Bool { }
func hasSameName(as person: Person) -> Bool { }
}
I want to get 2 lists:
1. [age, name]
2. [isOlder( _ : ), hasSameName( _ : )]
Or something similar.
Thanks
To list the methods for this class, one approach is to use the dir() function in Python. The dir() function will return all functions and properties of the class.
I believe you can use Mirror
API for this:
https://developer.apple.com/documentation/swift/mirror
New key-path API in Swift 4 might also be helpful: https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md
Swift 4:
func printMethodNamesForClass(cls: AnyClass) {
var methodCount: UInt32 = 0
let methodList = class_copyMethodList(cls, &methodCount)
if let methodList = methodList, methodCount > 0 {
enumerateCArray(array: methodList, count: methodCount) { i, m in
let name = methodName(m: m) ?? "unknown"
print("#\(i): \(name)")
}
free(methodList)
}
}
func enumerateCArray<T>(array: UnsafePointer<T>, count: UInt32, f: (UInt32, T) -> Void) {
var ptr = array
for i in 0..<count {
f(i, ptr.pointee)
ptr = ptr.successor()
}
}
func methodName(m: Method) -> String? {
let sel = method_getName(m)
let nameCString = sel_getName(sel)
return String(cString: nameCString)
}
func printMethodNamesForClassNamed(classname: String) {
// NSClassFromString() is declared to return AnyClass!, but should be AnyClass?
let maybeClass: AnyClass? = NSClassFromString(classname)
if let cls: AnyClass = maybeClass {
printMethodNamesForClass(cls: cls)
} else {
print("\(classname): no such class")
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With