UIButton mit Closure verbinden? (Schnell, Zielaktion)

Ich möchte einen UIButton mit einem Teil des Codes verknüpfen. Soweit ich festgestellt habe, ist die bevorzugte Methode, dies in Swift zu tun, immer noch dieaddTarget(target: AnyObject?, action: Selector, forControlEvents: UIControlEvents) Funktion. Dies nutzt dieSelector Konstrukt vermutlich aus Gründen der Abwärtskompatibilität mit Obj-C-Bibliotheken. Ich glaube, ich verstehe den Grund dafür@selector in Obj-C - auf eine Methode verweisen können, da in Obj-C Methoden keine erstklassigen Werte sind.

In Swift sind Funktionen jedoch erstklassige Werte. Gibt es eine Möglichkeit, einen UIButton mit einem Closure zu verbinden, etwa so:

// -- Some code here that sets up an object X

let buttonForObjectX = UIButton() 

// -- configure properties here of the button in regards to object
// -- for example title

buttonForObjectX.addAction(action: {() in 

  // this button is bound to object X, so do stuff relevant to X

}, forControlEvents: UIControlEvents.TouchUpOutside)

Soweit mir bekannt, ist dies derzeit nicht möglich. In Anbetracht dessen, dass Swift so aussieht, als ob es ein ziemlich funktionales Ziel sein soll, warum ist das so? Die beiden Optionen könnten aus Gründen der Abwärtskompatibilität eindeutig nebeneinander bestehen. Warum funktioniert das nicht mehr wie onClick () in JS? Es scheint, dass dienur Um einen UIButton an ein Ziel-Aktions-Paar anzuschließen, müssen Sie etwas verwenden, das ausschließlich aus Gründen der Abwärtskompatibilität vorhanden ist (Selector).

Mein Anwendungsfall besteht darin, UIButtons in einer Schleife für verschiedene Objekte zu erstellen und sie dann jeweils mit einem Abschluss zu verknüpfen. (Setzen eines Tags / Nachschlagen in einem Wörterbuch / Subclassing-UIButton sind schmutzige Teillösungen, aber ich bin daran interessiert, wie dies funktionell gemacht wird, dh dieser Closure-Ansatz.)

Antworten auf die Frage(8)

Ihre Antwort auf die Frage