据我所知,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!);
额外
我也试过调用performSelector但是这已经完全删除了Swift 2.我也想阻止使用任何@objc属性/注释.
解决方法
如果您正在寻找一种完全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")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。