メソッド内でアクションを作成することは可能ですか?メソッド内部でアクションを作成する方法をスウィフト
func hello(){
button.addtarget(self.,#selector(itemTocall),forControlEvents:TouchInside)
let itemTocall = {
print("hello")
}
}
メソッド内でアクションを作成することは可能ですか?メソッド内部でアクションを作成する方法をスウィフト
func hello(){
button.addtarget(self.,#selector(itemTocall),forControlEvents:TouchInside)
let itemTocall = {
print("hello")
}
}
非常に意味はありませんが、広義にははいです。まず、目標/行動は、閉鎖の数年前に多く開発されたことを忘れないでください。したがって、実際には機能に重複はありません。アクションは特定のセレクタでなければならず、静的に存在する必要があります。しかし、我々はその時点で何をしたいのかを行うことができます。例えば、我々はこれを構築することができ、単純に好き:
class Something: NSObject {
let button = UIButton()
var dispatchFunc: (UIButton) -> Void = {_ in}
func dispatch(button: UIButton) {
dispatchFunc(button)
}
func hello(){
dispatchFunc = {_ in
print("hello")
}
button.addTarget(self, action: #selector(dispatch), for: .touchUpInside)
}
}
さて、dispatchFunc
はあなたが行動になりたいものは何でもする書き換えられ、そしてdispatch
はちょうど仲介として存在します。もちろん、この手法は大幅に拡張することができます。多くの異なるボタンが実行された内容を動的に変更できるように(たとえすべてが同じdispatch
関数を指していても)、クロージャのボタン(またはボタンID)の辞書を持つことができます。または、複数のアクションを実行できるように、一連のクロージャを持つこともできます。あなたが望むものなら、なんでも。
(ObjCランタイムを使用するなど、これを達成するには他にも多くの方法があります。メッセージのディスパッチを無効にし、バッキングメソッドをもたない任意のセレクタを処理できますが、閉鎖。
あなたは毎日何か新しいことを学びます!私の理解を深めてくれてありがとう。 (私の答えは削除されました!)。 – Sparky