是否可以在Objective-C中强制转换对象,以告知编译器其类型可能是其中之一?

例如,在我的answer to iOS: Two Gestures, One Target-Action中,我知道一个对象将是UITapGestureRecognizerUILongPressGestureRecognizer,但是不确定哪个对象。而且,这两个类都响应numberOfTapsRequired,但不通过通用协议(protocol)进行响应。它们只是实现相同的属性。

因此,为了避免编译器错误,我只是将对象转换为UILongPressGestureRecognizer。现在可以使用,但是如果iOS SDK的 future 版本更改UITapGestureRecognizer numberOfTapsRequired属性的名称(并保持UILongPressGestureRecognizer的名称不变),则我的代码将编译,但双击时会出现无法识别的选择器异常而崩溃。

因此,如果有一种方法可以告诉编译器“嘿,我知道该对象是两种类型之一”,那么这将使我能够进行准确的转换。

如果您无法在Objective-C中做到这一点,那么是否有任何编程语言都允许这样做?我听说C#几乎可以让您做任何事情。

最佳答案

我认为Objective-C中不存在“多重转换”,但是您可以在编译时使用类似的方法来解决此问题。

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

     (UITapGestureRecognizer*)gestureRecognizer.numberOfTapsRequired;
}

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

     (UILongPressGestureRecognizer*)gestureRecognizer.numberOfTapsRequired;
}

08-18 11:56
查看更多