加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 有没有办法获得变量列表和类的功能

发布时间:2020-12-14 17:58:10 所属栏目:百科 来源:网络整理
导读:有没有办法获得变量列表和类的功能? 例如: 如果我的课程如下 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. [isOld
有没有办法获得变量列表和类的功能?

例如:
如果我的课程如下

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( _ : )]

或类似的东西.

谢谢

解决方法

在目标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")
}
}

快乐编码..

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读