2016-11-14 4 views
1

Я знаю, что я должен добавить цель, как это:Swift UISwitch Selector рядный

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) 

, который не нравится быстро, как я могу это сделать?

ответ

4

К сожалению, вы не можете сделать это напрямую. Помните, что вы имеете дело с каркасом Cocoa. Он старый и старомодный и написан в Objective-C. И это было написано задолго до того, как Objective-C имел блоки, и длинный до того, как Swift существовал. Он не имеет понятия функции действия UIControl, описываемой как функция (или анонимное тело функции, как вы это делаете); это должен быть селектор, т. е. просто имя метода в цель.

Возможно, вы могли бы написать расширение для UIControl или, по крайней мере, подкласс UISwitch, который реализует подобные вещи, или могут быть сторонние фреймворки, которые вам помогут; но, как вы считаете, ваша идея, хотя и достаточно естественная для кого-то, привыкшего к Свифт, обречена на провал.