0

Objective-C でオブジェクトをキャストして、その型が多くの型の 1 つになる可能性があることをコンパイラに伝えることは可能ですか?

たとえば、iOS: Two Gestures, One Target-Action に対する私の回答では、オブジェクトが aUITapGestureRecognizerまたは aになることはわかっていますが、どちらかはわかりUILongPressGestureRecognizerません。そして、これらのクラスは両方ともnumberOfTapsRequired共通のプロトコルに応答しますが、それを介してではありません。どちらも同じプロパティを実装しています。

したがって、コンパイラ エラーを回避するために、オブジェクトを としてキャストするだけUILongPressGestureRecognizerです。これは現在は機能しますが、iOS SDK の将来のバージョンでUITapGestureRecognizer numberOfTapsRequiredプロパティの名前が変更された場合 (および変更されていUILongPressGestureRecognizerないままになっている場合)、コードはコンパイルされますが、ダブルタップで認識されないセレクター例外が発生してクラッシュします。

したがって、コンパイラに「このオブジェクトが 2 つの型のいずれかであることはわかっています」と伝える方法があれば、正確なキャストを行うことができます。

Objective-C でこれを行うことができない場合、これを許可するプログラミング言語はありますか? C# では何でもできると聞きました。

4

1 に答える 1

0

Objective-C に「複数のキャスト」が存在するとは思いませんが、このようなものを使用して、コンパイル時にこの問題をキャッチできます。

if([gestureRecognizer isKindofClass: [UITapGestureRecognizer class]]) {

     (UITapGestureRecognizer*)gestureRecognizer.numberOfTapsRequired;
}

else if([gestureRecognizer isKindofClass: [UILongPressGestureRecognizer class]]) {

     (UILongPressGestureRecognizer*)gestureRecognizer.numberOfTapsRequired;
}
于 2013-10-28T04:10:56.207 に答える