Wie registriere ich mit NSUndoManager Rückgängigmachungen mit Swift closures?

Ich versuche zu grok wie man @ benutNSLayoutManager mit Swift Verschlüssen. Ich kann ein @ erfolgreich registrierundo wie folgt

doThing();
undoManager?.registerUndoWithTarget(self, handler: { _ in
    undoThing();
}
undoManager?.setActionName("do thing")

atürlich muss ich @ unterstützredo was einem Rückgängigmachen eines Rückgängigmachens gleichkommt. Ich kann das machen

doThing();
undoManager?.registerUndoWithTarget(self, handler: { _ in
    undoThing();

    undoManager?.registerUndoWithTarget(self, handler: { _ in
        doThing();
    }
    undoManager?.setActionName("do thing")
}
undoManager?.setActionName("do thing")

Aber jetzt muss ich ein Rückgängigmachen des Redo unterstützen ... hmmm .... ok:

doThing();
undoManager?.registerUndoWithTarget(self, handler: { _ in
    undoThing();

    undoManager?.registerUndoWithTarget(self, handler: { _ in
        doThing();

        undoManager?.registerUndoWithTarget(self, handler: { _ in
             undoThing();
        }
        undoManager?.setActionName("do thing")
    }
    undoManager?.setActionName("do thing")
}
undoManager?.setActionName("do thing")

As können Sie seine "Schildkröten vollständig unten sehen." Wie entkomme ich diesem Wahnsinn? Das heißt, in all dem Beispielcode, den ich finden kann, verwenden die Leute die Selektorversion des Codes, um eine Methode zu registrieren, die sich selbst rückgängig machen kann - dies ist offensichtlich nicht mit der von mir verwendeten Verschlussmethode machbar ... Wie verwendet man den Verschluss? Version und erhalten unbegrenzt rückgängig machen / wiederholen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage