2016-09-14 5 views

答えて

1

非常に意味はありませんが、広義にははいです。まず、目標/行動は、閉鎖の数年前に多く開発されたことを忘れないでください。したがって、実際には機能に重複はありません。アクションは特定のセレクタでなければならず、静的に存在する必要があります。しかし、我々はその時点で何をしたいのかを行うことができます。例えば、我々はこれを構築することができ、単純に好き:

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ランタイムを使用するなど、これを達成するには他にも多くの方法があります。メッセージのディスパッチを無効にし、バッキングメソッドをもたない任意のセレクタを処理できますが、閉鎖。

+0

あなたは毎日何か新しいことを学びます!私の理解を深めてくれてありがとう。 (私の答えは削除されました!)。 – Sparky

関連する問題