我知道我应该添加这样的目标:
mySwitch.addTarget(self, action: Selector("selector"), for: UIControlEvents.valueChanged)
但我不想为选择器设置单独的功能,所以我想做这样的事情:
mySwitch.addTarget(self, action: Selector {
if mySwitch.on {
label.text = "Yes, Please! - For:"
........
}
}, for: UIControlEvents.valueChanged)
swift不喜欢,我怎么能这样做?
答案 0 :(得分:5)
不幸的是,你不能直接这样做。请记住,您正在处理Cocoa框架。它是古老的,用Objective-C编写的。它早在Objective-C阻塞之前编写,并且在Swift存在之前 long 。它没有将UIControl的动作函数概念描述为函数(或匿名函数体,正如你所做的那样);它必须是选择器,实际上只是目标中方法的名称。
你或许可以写一个扩展到UIControl,或者至少是一个UISwitch子类,它实现了这种东西,或者可能有第三方框架可以帮助你;但事实上,你的想法虽然对于习惯于斯威夫特的人来说足够自然,但注定要失败。