2013-10-28 32 views
0

是否可以在Objective-C中投射一個對象來告訴編譯器它的類型可能是多種類型之一?Objective-C Multiple Cast

例如,在我的answer to iOS: Two Gestures, One Target-Action中,我知道對象將是UITapGestureRecognizerUILongPressGestureRecognizer,但我不確定哪一個。而且,這兩個類都對numberOfTapsRequired作出響應,但不通過通用協議。他們只是實施相同的財產。

所以,爲了解決編譯錯誤,我只是將對象強制轉換爲UILongPressGestureRecognizer。這現在可行,但如果未來版本的iOS SDK更改UITapGestureRecognizernumberOfTapsRequired屬性的名稱(並保留UILongPressGestureRecognizer未更改),則我的代碼將編譯但會在雙擊時遇到無法識別的選擇器異常。所以,如果有一種方法我可以告訴編譯器,「嘿,我知道這個對象是兩種類型之一」,那麼這將允許我做一個準確的演員。

如果你不能在Objective-C中做到這一點,是否有任何編程語言允許這樣做?我聽說C#幾乎可以讓你做任何事情。

+0

保持簡單,只需使用兩個目標動作 – zaph

回答

0

我不認爲Objective-C中存在「多重強制轉換」,但您可以在編譯時使用類似的方法來解決這個問題。

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

    (UITapGestureRecognizer*)gestureRecognizer.numberOfTapsRequired; 
} 

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

    (UILongPressGestureRecognizer*)gestureRecognizer.numberOfTapsRequired; 
}