Swift UISwitch选择器内联

Kas*_*hif 3 uiswitch swift

我知道我应该添加这样的目标:

mySwitch.addTarget(self, action: Selector("selector"), for: UIControlEvents.valueChanged)
Run Code Online (Sandbox Code Playgroud)

但我不想为选择器使用单独的函数,所以我想做这样的事情:

mySwitch.addTarget(self, action: Selector {
    if mySwitch.on {
        label.text = "Yes, Please! - For:"
        ........
    }
}, for: UIControlEvents.valueChanged)
Run Code Online (Sandbox Code Playgroud)

swift不喜欢这个,我怎么能这样做?

mat*_*att 5

不幸的是,你无法直接做到这一点.请记住,您正在处理Cocoa框架.它是古老而老式的,用Objective-C编写.它早在Objective-C出现之前就已经写好了,在Swift存在之前.它没有将UIControl的动作函数描述为函数(或者你正在做的匿名函数体)的概念; 它必须是一个选择器,实际上,它只是目标中方法的名称.

你也许可以写一个扩展到UIControl,或者至少是一个实现这种事情的UISwitch子类,或者可能有第三方框架可以帮助你; 但事实上,你的想法虽然对于习惯于斯威夫特的人来说足够自然,但注定要失败.