gpt4 book ai didi

swift - 在 Swift 中动态调用方法

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:46 24 4
gpt4 key购买 nike

我已经创建了一个用于 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: 函数本身,但我正在寻找那种类型的功能,除了它会返回 NSColor 对象。

谢谢。

最佳答案

我不明白 Aaron Brager 最初的建议有什么问题。从函数字典开始:

let colourDict : [ String : () -> UIColor ] = [
"blackColor" : UIColor.blackColor,
"whiteColor" : UIColor.whiteColor,
// ... and so on ...
]

这非常有效 - 比在内存中生成所有颜色并将它们保存在那里更有效 - 因为它基本上只是一个指针列表。

要获取实际颜色,请按名称获取颜色函数,然后调用它:

let actualColor = colourDict["blackColor"]!()

关于swift - 在 Swift 中动态调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com