我需要在swift中定义方法调用的字典,实际上我想要一个基于传入字符串的函数指针列表,这是Python中常见的代替switch语句的模式。也许我正在接近这个错误,并且switch语句将是这里推荐的方法,但我想将设置逻辑移动到类成员变量声明中,而不是为了清楚起见而将它驻留在构造函数中。这是我目前正在尝试的内容,这应该让您大致了解我正在努力实现的目标:
let typeMap: [String: (AnyObject) -> Void] = [
"UIButton.fgColor": {(value: UIColor) -> Void in UIButton.appearance().setTitleColor(value, forState: UIControlState.Normal) }
...
// hundreds more of these
]
不幸的是,我似乎收到一条错误,指出'AnyObject' is not a subtype of 'UIColor'
,我不明白。我的印象是所有类/对象都是从AnyObject继承的,UIColor是根据其手册的对象。很明显我在这里遗漏了一些东西,我的语法错了,或者我对两者如何联系的理解?有没有更好的方法来设置它?
答案 0 :(得分:1)
你需要在封闭内部进行展开。 Swift不会自动向下转换为AnyObject
:
let typeMap: [String: (AnyObject) -> Void] = [
"UIButton.fgColor": {
if let color = $0 as? UIColor {
UIButton.appearance().setTitleColor(color, forState: UIControlState.Normal)
}
},
"anotherKey": ...
]