Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func printIvarsForClass(cls: AnyClass) {
- var ivarCount: UInt32 = 0
- let ivarList = class_copyIvarList(cls, &ivarCount)
- if let ivarList = ivarList, ivarCount > 0 {
- enumerateCArray(array: ivarList, count: ivarCount) { i, v in
- let name = ivar(v: v) ?? "unknown"
- print("#\(i): \(name)")
- }
- free(ivarList)
- }
- }
- 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 ivar(v: Ivar) -> String? {
- guard let p = ivar_getName(v) else { return nil }
- return String(cString: p)
- }
- func printIvarsForClassNamed(classname: String) {
- // NSClassFromString() is declared to return AnyClass!, but should be AnyClass?
- let maybeClass: AnyClass? = NSClassFromString(classname)
- if let cls: AnyClass = maybeClass {
- printIvarsForClass(cls: cls)
- } else {
- print("\(classname): no such class")
- }
- }
- 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 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")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement