swift – 使用反射调用方法
发布时间:2020-12-14 04:26:54 所属栏目:百科 来源:网络整理
导读:据我所知,Swift中的反思尚不清楚.我目前正在为了性能而将objective-c代码转换为swift(我注意到了相当大的差异). 现在我需要的是一种使用反射调用Method的方法.需要调用该方法的对象扩展NSObject以使用以下代码解析类; let clazz = NSClassFromString("MyProj
据我所知,Swift中的反思尚不清楚.我目前正在为了性能而将objective-c代码转换为swift(我注意到了相当大的差异).
现在我需要的是一种使用反射调用Method的方法.需要调用该方法的对象扩展NSObject以使用以下代码解析类; let clazz = NSClassFromString("MyProject.DynamicClass") as NSObject.Type; let clazzInstance = clazz() as! NSObject; 我能够使用以下代码检索参数的数量和对方法的引用; let selectorMethod = Selector("myCustomMethod:"); let numberOfArguments : UInt32 = method_getNumberOfArguments(selectorMethod); let referenceToMethod : Method = class_getInstanceMethod(clazz,selector!); 但是如何使用/调用referenceToMethod? 额外 解决方法
如果您正在寻找一种完全Swifty的反射方式,那么具有需要调用的方法的对象根本不需要是NSObject,而是只需要一个必需的初始化器.看看下面的例子:
class A{ required init(){ } func printSomething(s:String){ println(s) } } // initializing object dynamically from class let clazz = NSClassFromString("MyProject.A") as! A.Type let clazzInstance = clazz() // getting and calling its methods in Swifty way let method = clazzInstance.printSomething method("something") 使用它的优点在于你根本不需要使用转换,并且使用错误的参数调用方法会触发编译时错误 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |