Быстрое управление доступом с целевыми селекторами
Посмотрите на этот примерный код:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let letterButton = UIButton.buttonWithType(.Custom) as UIButton
self.view.addSubview(letterButton)
letterButton.addTarget(self, action:Selector("buttonDidTap:"), forControlEvents: .TouchUpInside)
}
func buttonDidTap(button: UIButton!) {
print(button.char)
}
}
Целевое действие для UIButton
работает отлично, пока Селектор общедоступный или внутренний, но если он закрытый, он сработает из-за непризнанного селектора, отправленного в экземпляр
Есть ли способ достичь этого? Я не хочу, чтобы функция tap была общедоступной или внутренней.
Ответы
Ответ 1
вам нужно @objc
выставить закрытый метод для выполнения objc
@objc private func buttonDidTap(button:UIButton!) {
println(button.char)
}
От примечания к выпуску Xcode6 beta4
Объявления, помеченные как закрытые, не отображаются во время выполнения Objective-Cесли не оговорено иначе. Выходы IB, действия IB и основные данные управляемые свойства остаются доступными для Objective-C независимо от их доступа уровень. Если вам нужен частный метод или свойство, подлежащее вызову из Objective-C (например, для более старого API, который использует селекторный обратный вызов), добавить атрибут @objc в объявление явно.!