6

NSLayoutManagerSwiftクロージャーを使用して使用する方法を理解しようとしています。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")

ご覧のとおり、その「カメがずっと下に」。この狂気から逃れるにはどうすればいいですか?つまり、私が見つけることができるすべてのサンプルコードで、コードのセレクターバージョンを使用して、それ自体を元に戻すことができるメソッドを登録します-これは、私が使用しているクロージャーメソッドでは明らかに実行できません...クロージャーをどのように使用しますか?バージョンと無制限の元に戻す/やり直しを取得しますか?

4

1 に答える 1