Быстрое управление доступом с целевыми селекторами

Посмотрите на этот примерный код:

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 в объявление явно.!