Advertisement
Guest User

Untitled

a guest
May 24th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. func printIvarsForClass(cls: AnyClass) {
  2. var ivarCount: UInt32 = 0
  3. let ivarList = class_copyIvarList(cls, &ivarCount)
  4. if let ivarList = ivarList, ivarCount > 0 {
  5. enumerateCArray(array: ivarList, count: ivarCount) { i, v in
  6. let name = ivar(v: v) ?? "unknown"
  7. print("#\(i): \(name)")
  8. }
  9.  
  10. free(ivarList)
  11. }
  12. }
  13. func enumerateCArray<T>(array: UnsafePointer<T>, count: UInt32, f: (UInt32, T) -> Void) {
  14. var ptr = array
  15. for i in 0..<count {
  16. f(i, ptr.pointee)
  17. ptr = ptr.successor()
  18. }
  19. }
  20. func ivar(v: Ivar) -> String? {
  21. guard let p = ivar_getName(v) else { return nil }
  22. return String(cString: p)
  23. }
  24. func printIvarsForClassNamed(classname: String) {
  25. // NSClassFromString() is declared to return AnyClass!, but should be AnyClass?
  26. let maybeClass: AnyClass? = NSClassFromString(classname)
  27. if let cls: AnyClass = maybeClass {
  28. printIvarsForClass(cls: cls)
  29. } else {
  30. print("\(classname): no such class")
  31. }
  32. }
  33.  
  34. func printMethodNamesForClass(cls: AnyClass) {
  35. var methodCount: UInt32 = 0
  36. let methodList = class_copyMethodList(cls, &methodCount)
  37. if let methodList = methodList, methodCount > 0 {
  38. enumerateCArray(array: methodList, count: methodCount) { i, m in
  39. let name = methodName(m: m) ?? "unknown"
  40. print("#\(i): \(name)")
  41. }
  42.  
  43. free(methodList)
  44. }
  45. }
  46.  
  47. func methodName(m: Method) -> String? {
  48. let sel = method_getName(m)
  49. let nameCString = sel_getName(sel)
  50. return String(cString: nameCString)
  51. }
  52.  
  53. func printMethodNamesForClassNamed(classname: String) {
  54. // NSClassFromString() is declared to return AnyClass!, but should be AnyClass?
  55. let maybeClass: AnyClass? = NSClassFromString(classname)
  56. if let cls: AnyClass = maybeClass {
  57. printMethodNamesForClass(cls: cls)
  58. } else {
  59. print("\(classname): no such class")
  60. }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement