Swift 内联 UISwitch 选择器
Swift UISwitch Selector inline
我知道我应该像这样添加目标:
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 不喜欢,我该怎么做?
很遗憾,您不能直接执行此操作。请记住,您正在处理 Cocoa 框架。又老又老套,用Objective-C写的。而且它是在 Objective-C 有块之前很久就写的,并且 long 在 Swift 存在之前就已经写好了。它没有将 UIControl 的操作函数描述为 function(或匿名函数体,正如您所做的那样)的概念;它必须是一个选择器,也就是说,实际上,目标中的方法只是名称。
您或许可以编写 UIControl 的扩展,或者至少是 UISwitch 的子类,以实现此类功能,或者可能有第三方框架可以帮助您;但就目前情况而言,您的想法虽然对于习惯 Swift 的人来说足够自然,但注定要失败。
我知道我应该像这样添加目标:
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 不喜欢,我该怎么做?
很遗憾,您不能直接执行此操作。请记住,您正在处理 Cocoa 框架。又老又老套,用Objective-C写的。而且它是在 Objective-C 有块之前很久就写的,并且 long 在 Swift 存在之前就已经写好了。它没有将 UIControl 的操作函数描述为 function(或匿名函数体,正如您所做的那样)的概念;它必须是一个选择器,也就是说,实际上,目标中的方法只是名称。
您或许可以编写 UIControl 的扩展,或者至少是 UISwitch 的子类,以实现此类功能,或者可能有第三方框架可以帮助您;但就目前情况而言,您的想法虽然对于习惯 Swift 的人来说足够自然,但注定要失败。