最近、リテラルセレクターは廃止されました。セレクターがそのクラスに入っていれば、うまくいきます。Objective-Cセレクター廃止予定置換
しかし考える。この例(私は多くのコードを持って、これは簡単な例です):
static func createMenuButton(controller:UIViewController) -> UIBarButtonItem {
let menuButton = UIButton(frame: CGRectMake(0, 0, 22, 22))
menuButton.addTarget(controller, action: Selector("menuButtonClicked:"), forControlEvents:.TouchUpInside)
let menuButtonContainer = UIView(frame: menuButton.frame)
menuButtonContainer.addSubview(menuButton)
let menuButtonItem = UIBarButtonItem(customView: menuButtonContainer)
return menuButtonItem
}
このユーティリティメソッドは私に様々なビュー・コントローラで使用するための良い機能を提供します。その複数の使用のため、新しい#selector
構文を使用するには、各ビューコントローラにコピーする必要があります。しかし、アップルは、なぜよりダイナミックな方法を非難する? i++
、i--
、Cスタイルのfor
ループのような新しいリリースでは削除されると思います(ただし、削除する理由はありませんが、簡単に置き換えることはできます)。将来のリリースでこのアプローチを有効にするための回避策はありますか?新しいリリースごとに、私のプロジェクトの構文がすべて破られます。
ありがとうございます!あなたのプロトコルメソッドが動作しています。私は既存のクラスに拡張機能を書く必要がなく、まだ機能していないというのは奇妙です。いくつかのメソッドを非推奨にしていますが、私は既にそれを読んでいますが、まだ同意しません...構文を削除すると、私は自分のコードを修正することができますが、それは時間がかかります。また、私は多くのサードパーティのライブラリを使用しています。 – Makalele
@Makalele私はそれがうまくいった! 'extension'は必須ではありません。プロトコルの実装を互いに独立させておくスタイル提案です。私は、スウィフトコードが今後数年間半定期的に崩壊し続けるのではないかと推測しています。もし本当にあなたを迷惑に思っていたら、Objective-Cに戻ってみてください。 –
ええ、私は拡張が必要ではないことを知っていますが、私は少なくともそれを使用しているすべてのクラスでそのプロトコルに従わなければなりません。代わりに私は何もする必要はなく、それは機能しました。 "menuButtonClicked2"の "menuButtonClicked"を変更しても、コンパイル時にエラーは発生しませんでした。しかし、もちろんアプリがクラッシュしたとき、私はそれを引き起こそうとしました。そのコードで@objcキーワードが与える正確な値は? – Makalele