Используя NSUndoManager, как зарегистрировать отмены с помощью замыканий Swift

Я пытаюсь понять, как использоватьNSLayoutManager используя закрытие Swift. Я могу успешно зарегистрироватьundo следующее:

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

Конечно, мне нужно поддержатьredo что равнозначно отмене отмены. Я могу сделать это:

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

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

Но теперь мне нужно поддержать отмену повторения ... хммм ... ок:

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")

Как видите, «черепахи внизу». Как мне избежать этого безумия? то есть, во всем примере кода, который я могу найти, люди используют версию кода селектора, чтобы зарегистрировать метод, который может отменить сам - это явно не выполнимо с методом замыкания, который я использую ... Как можно использовать замыкание версия и получить неограниченное отменить / повторить?

Ответы на вопрос(1)

Ваш ответ на вопрос