【问题标题】:Objective-C Multiple CastObjective-C 多重转换
【发布时间】:2013-11-06 17:45:00
【问题描述】:

是否可以在 Objective-C 中强制转换一个对象,以便告诉编译器它的类型可能是多种类型之一?

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

所以,为了避免编译器错误,我只是将对象转换为UILongPressGestureRecognizer。这现在可以工作了,但是如果 iOS SDK 的未来版本更改了 UITapGestureRecognizer numberOfTapsRequired 属性的名称(并保持 UILongPressGestureRecognizer 的名称不变),那么我的代码将编译但由于无法识别的选择器异常而崩溃双击。

所以,如果有一种方法可以告诉编译器,“嘿,我知道这个对象是两种类型之一”,那么我就可以进行准确的转换。

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

【问题讨论】:

  • 保持简单,只使用两个 Target-Actions

标签: objective-c class casting compiler-errors protocols


【解决方案1】:

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

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

     (UITapGestureRecognizer*)gestureRecognizer.numberOfTapsRequired;
}

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

     (UILongPressGestureRecognizer*)gestureRecognizer.numberOfTapsRequired;
}

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 2012-07-06
    • 2010-11-07
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多