gpt4 book ai didi

Objective-C 多重转换

转载 作者:行者123 更新时间:2023-12-02 11:04:51 25 4
gpt4 key购买 nike

是否可以在 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;
}

关于Objective-C 多重转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com