このサンプルコードを見てください:
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)
}
}
セレクターがpublicまたはinternalである限り、UIButton
のターゲットアクションは正常に動作しますが、privateの場合、クラッシュします認識されないセレクターがインスタンスに送信されたため
これを達成する方法はありますか?タップ機能をパブリックまたは内部にしたくありません。
objcランタイムにプライベートメソッドを公開するには、@objc
が必要です
@objc private func buttonDidTap(button:UIButton!) {
println(button.char)
}
プライベートとマークされた宣言は、特に注釈がない限り、Objective-Cランタイムに公開されません。 IBアウトレット、IBアクション、およびコアデータ管理プロパティは、アクセスレベルに関係なくObjective-Cに公開されたままです。 Objective-Cから呼び出し可能なプライベートメソッドまたはプロパティが必要な場合(セレクターベースのコールバックを使用する古いAPIなど)、宣言に@objc属性を明示的に追加します。 !