2017-06-21 57 views
3

有没有办法获得一个类的变量和函数列表?有没有办法获得一个类的变量和函数列表

例如: 如果我的类就像下面

class Person { 
    var age: Int! 
    var name: String! 
    func isOlder(from person: Person) -> Bool { } 
    func hasSameName(as person: Person) -> Bool { } 
} 

我想2所列出:

1. [age, name] 
2. [isOlder(_ :), hasSameName(_ :)] 

或类似的东西。

由于

+0

嗯...不知道,但你可以看看'Codable' protoc ol在iOS 11中。也许?如果没有别的办法。 – Fogmeister

回答

2

在目标C

#import <objc/runtime.h> 

getDetailsOfClass(Class clz) { 

    unsigned int methodCount = 0; 
    Method *methods = class_copyMethodList(clz, &methodCount); 

    printf("Found %d methods on '%s'\n", methodCount, class_getName(clz)); 

    for (unsigned int i = 0; i < methodCount; i++) { 
     Method method = methods[i]; 

     printf("\t'%s' has method named '%s' of encoding '%s'\n", 
       class_getName(clz), 
       sel_getName(method_getName(method)), 
       method_getTypeEncoding(method)); 
    } 

    free(methods); 
} 

调用:getDetailsOfClass(class)

在夫特

按照SO Post。实施了同样的成功。

要获取方法名称:

func printMethodNamesForClass(cls: AnyClass) { 
    var methodCount: UInt32 = 0 
    let methodList = class_copyMethodList(cls, &methodCount) 
    if methodList != nil && methodCount > 0 { 
     enumerateCArray(methodList, methodCount) { i, m in 
      let name = methodName(m) ?? "unknown" 
      println("#\(i): \(name)") 
     } 

     free(methodList) 
    } 
} 
func enumerateCArray<T>(array: UnsafePointer<T>, count: UInt32, f: (UInt32, T) ->()) { 
    var ptr = array 
    for i in 0..<count { 
     f(i, ptr.memory) 
     ptr = ptr.successor() 
    } 
} 
func methodName(m: Method) -> String? { 
    let sel = method_getName(m) 
    let nameCString = sel_getName(sel) 
    return String.fromCString(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) 
} 
else { 
println("\(classname): no such class") 
} 
} 

编码快乐..

+0

这可以在Swift中完成吗? – ilan

+0

@ilan希望它的工作..需要任何进一步的解释? – Saranjith

+0

我得到的属性,但无法弄清楚如何获得方法 – ilan

相关问题