有没有办法获取类的变量和函数列表 [英] Is there a way to get list of variables and function of a class

查看:28
本文介绍了有没有办法获取类的变量和函数列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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 { }
}

我想获得 2 个列表:

I want to get 2 lists:

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

或类似的东西.

谢谢

推荐答案

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")
    }
}

这篇关于有没有办法获取类的变量和函数列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆