小编Can*_*Fan的帖子

在Swift中动态调用方法

我已经创建了一个预定义颜色库,可以在Swift和Objective-C中使用,我已经为Xcode重写了一个插件,它在编辑器中预览颜色,以便它可以与我的库一起工作(以及其他一些变化).

该插件目前有一个创建的颜色列表.我对这个解决方案并不感到兴奋,因为这意味着无论何时我改变颜色列表,我都必须在这里修改我的代码.另外,我不喜欢有一个数据结构,周围有大约1500种颜色和字符串.似乎没那么高效或优雅.

我想要做的不是将所有颜色存储在内存中,而是在代码中遇到函数名时调用NSColor的正确函数.我发现我可以检查NSColor是否使用函数respondsToSelector响应选择器:但调用performSelector:不符合我的需要,因为我需要调用的返回值.

那么还有一种方法可以解决这个问题.

let colourDict [ String : NSColor ] = [
    "blackColor" : NSColor.blackColor(),
    "whiteColor" : NSColor.whiteColor() ]
...

let foundColour = colourDict[ colourMethodName ]
Run Code Online (Sandbox Code Playgroud)

对于这样的事情.

if ( NColor.respondsToSelector ( Selector ( colourMethodName ) ) {
    foundColour = NSColor.performSelector ( Selector ( colourMethodName ) )
}
Run Code Online (Sandbox Code Playgroud)

显然它不是performSelector:function本身,但我正在寻找那种类型的功能,除了它将返回NSColor对象.

谢谢.

swift

5
推荐指数
1
解决办法
1296
查看次数

标签 统计

swift ×1