在Swift中动态调用方法
发布时间:2020-12-14 04:54:25 所属栏目:百科 来源:网络整理
导读:我已经创建了一个预定义颜色库,可以在 Swift和Objective-C中使用,我已经为Xcode重写了一个插件,它在编辑器中预览颜色,以便它可以与我的库一起工作(以及其他一些变化). 该插件目前有一个创建的颜色列表.我对这个解决方案并不感到兴奋,因为这意味着无论何时我
我已经创建了一个预定义颜色库,可以在
Swift和Objective-C中使用,我已经为Xcode重写了一个插件,它在编辑器中预览颜色,以便它可以与我的库一起工作(以及其他一些变化).
该插件目前有一个创建的颜色列表.我对这个解决方案并不感到兴奋,因为这意味着无论何时我改变颜色列表,我都必须在这里修改我的代码.另外,我不喜欢有一个数据结构,周围有大约1500种颜色和字符串.似乎没那么高效或优雅. 我想要做的不是将所有颜色存储在内存中,而是在代码中遇到函数名时调用NSColor的正确函数.我发现我可以检查NSColor是否使用函数respondsToSelector响应选择器:但调用performSelector:不符合我的需要,因为我需要调用的返回值. 那么还有一种方法可以解决这个问题. let colourDict [ String : NSColor ] = [ "blackColor" : NSColor.blackColor(),"whiteColor" : NSColor.whiteColor() ] ... let foundColour = colourDict[ colourMethodName ] 对于这样的事情. if ( NColor.respondsToSelector ( Selector ( colourMethodName ) ) { foundColour = NSColor.performSelector ( Selector ( colourMethodName ) ) } 显然它不是performSelector:function本身,但我正在寻找那种类型的功能,除了它将返回NSColor对象. 谢谢. 解决方法
我不明白Aaron Brager的原始建议有什么问题.从函数字典开始:
let colourDict : [ String : () -> UIColor ] = [ "blackColor" : UIColor.blackColor,"whiteColor" : UIColor.whiteColor,// ... and so on ... ] 这非常有效 – 比在内存中生成所有颜色并将它们保存在那里更有效 – 因为它只是一个指针列表,基本上. 要获得实际颜色,请按名称获取颜色函数,并将其命名为: let actualColor = colourDict["blackColor"]!() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |