使用Swift执行静态方法的performSelector

时间:2015-11-04 16:46:15

标签: ios objective-c swift swift2 uicolor

我正在移植一些Obj-C代码并尝试使用Swift等效的:

SEL selector = NSSelectorFromString(value);

BOOL isColorMethod = [[UIColor class] respondsToSelector:selector];

if(isColorMethod) {

  UIColor *color = [[UIColor class] performSelector:selector];
}

我做了一些研究,所有我能找到的帖子都是建议我用每个颜色对象的实例创建方法名称的字典。这似乎是非常不必要的,我从plist中提取颜色名称(例如redColor),因为我正在构建一个简单的StyleManager,因此它们必须是字符串。

任何人都知道你如何在Swift 2中做到这一点?

修改

看来我毕竟是在创作Swift 1。这在1中不起作用。看来我应该知道这一点。我只是去鞭打自己。

1 个答案:

答案 0 :(得分:4)

你完全按照它做的那样:

let s = Selector("redColor")
let color = UIColor.performSelector(s)

唯一的问题是你必须添加内存管理。所以:

let s = Selector("redColor")
let color = UIColor.performSelector(s).takeRetainedValue()

添加了responds支票:

let s = Selector("redColor")
if UIColor.respondsToSelector(s) {
    let color = UIColor.performSelector(s).takeRetainedValue()
}

为怀疑托马斯的利益添加了屏幕截图:

enter image description here

编辑 MartinR说我应该takeRetainedValue()放置takeUnretainedValue()。我不知道,所以我非常愿意相信!