加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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"]!()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读