swift – 使用反射调用方法

swift – 使用反射调用方法,第1张

概述据我所知, Swift中的反思尚不清楚.我目前正在为了性能而将objective-c代码转换为swift(我注意到了相当大的差异). 现在我需要的是一种使用反射调用Method的方法.需要调用该方法的对象扩展NSObject以使用以下代码解析类; let clazz = NSClassFromString("MyProject.DynamicClass") as NSObject.Type; l 据我所知,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?

额外
我也试过调用performSelector但是这已经完全删除了Swift 2.我也想阻止使用任何@objc属性/注释.

解决方法 如果您正在寻找一种完全Swifty的反射方式,那么具有需要调用的方法的对象根本不需要是NSObject,而是只需要一个必需的初始化器.看看下面的例子:

class A{    required init(){    }    func printSomething(s:String){        println(s)    }}// initializing object dynamically from classlet clazz = NSClassFromString("MyProject.A") as! A.Type   let clazzInstance = clazz()// getting and calling its methods in Swifty way    let method = clazzInstance.printSomething method("something")

使用它的优点在于你根本不需要使用转换,并且使用错误的参数调用方法会触发编译时错误

总结

以上是内存溢出为你收集整理的swift – 使用反射调用方法全部内容,希望文章能够帮你解决swift – 使用反射调用方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存