在OC中,因其动态性我们经常会用到Runtime相关的API,探索一下Runtime在Swift中的注意点

获取方法列表和属性列表

class Teacher: NSObject {
    var age: Int = 0
    @objc func teach() {
        print("你好啊")
    }
    @objc dynamic func teac1() {
        print("你好啊")
    }
}

func traversalMethod() {
    var methodCount: UInt32 = 0
    let methodList = class_copyMethodList(Teacher.self, &methodCount)
    for i in 0..<numericCast(methodCount) {
        if let method = methodList?[i] {
            let methodName = method_getName(method)
            print("方法:\\(methodName)")
        } else {
            print("未找到方法")
        }
    }
}

func traversalProperty() {
    var propertyCount: UInt32 = 0
    let propertyList = class_copyPropertyList(Teacher.self, &propertyCount)
    for i in 0..<numericCast(propertyCount) {
        if let property = propertyList?[i] {
            let propertyName = property_getName(property)
            print("属性:\\(String(utf8String: propertyName) ?? "")")
        } else {
            print("未找到属性")
        }
    }
}

traversalMethod()
traversalProperty()