デリゲートを転送するための汎用プロキシとして機能するクラスがあります。実装することでrespondsToSelector
、forwardInvocation
このクラスを使用して、さまざまな UI コントロールのデリゲートに送信されるセレクターを転送できます。
問題は、このクラスを使用すると、コンパイラの警告が表示されることです。たとえば、メッセージを UITableViewDelegate に転送するために使用すると、次のようになります。
DelegateForwarder* _forward = [[DelegateForwarder alloc] init];
_tableView.delegate = _forward;
コンパイラの警告が表示されます:
Assigning to id<UITableViewDelegate> from incompatible type 'DelegateForwarder'
DelegateForwarder がデリゲートを採用していないために警告が生成されることはわかっていますが、デリゲートがUITableViewDelegate
提供する転送メカニズムは完全に汎用的であるため、採用したくありません。
警告にもかかわらず、私のコードは意図したとおりに実行されます。
特定のプロトコルを採用していないという事実は問題にならないので、このクラスがメッセージ転送を使用することを何らかの方法でコンパイラとこのクラスのユーザーに示すためにできることはありますか?