私の iOS アプリケーションでは、お互いをパラメーターとして受け取る 2 つのブロック タイプを定義したいと考えています。
typedef void (^BlockA)(BlockB b);
typedef void (^BlockB)(BlockA a);
これはコンパイルに失敗し、最初の typedef で '不明な型名 BlockB が発生します (これは理にかなっています)。
次のようなタイプを定義する回避策があります。
typedef void (^BlockA)(id);
typedef void (^BlockB)(BlockA a);
次に、BlockA 定義内の BlockB 型にキャスト バックしますが、型の安全性が犠牲になります。
typedef を使用しないことも検討しましたが、これにより、展開されたブロック定義が無限にネストされます。
前方宣言を使用して構造体の循環依存を解決する方法は知っていますが、ブロックでこれを行う方法がわかりません。
循環依存関係の解決策がない場合、BlockA へのパラメーターをジェネリックではなく任意の Block 型に制限できる方法はありますか?id
これにより、ある程度の型安全性が得られます。