2013-06-04 29 views

回答

3

(MyObject *)靜態鑄造recognizer.view這是一個UIViewMyObject。這使您可以調用objectOne上的MyObject特定方法/屬性。沒有強制轉換,編譯器只會允許你調用UIView方法。

這可能是不安全的,因爲您假設Recognizer.view是MyObject類型。如果這個假設不真實,可能會發生壞事。有一個更安全的方法來做到這一點。

定義安全地投給你一個輔助方法:

static inline id MySafeCast(Class klass, id obj) { 
    return [obj isKindOfClass:klass] ? obj : nil; 
} 

的方法將返回nil,如果你對類型的假設是錯誤的。

// objectOne will be nil if recognizer.view is not a MyObject 
MyObject *objectOne = MySafeCast([MyObject class], recognizer.view); 
+0

謝謝你,我會盡快答覆你的答案,但我沒有足夠的積分來這樣做。 – Woodstock

+0

您可以接受它作爲您的問題的答案。 –

+0

謝謝,最後一件事,明智的做法是,UIGestureRecognizers應該是實例變量嗎? – Woodstock

1

是的,它將recognitionizer.view轉換爲MyObject類。

+0

謝謝你,我會upvote你的答案,但我沒有足夠的積分這樣做。 – Woodstock

2

該行代碼將recognizer.view轉換爲MyObject類型。這將允許您使用點.語法訪問MyObject的屬性。

由於Objective C是一種動態類型化語言,所以類型轉換不如強類型語言重要。即使不將變量強制轉換爲MyObject*類型,也可以使用方括號語法調用方法和訪問屬性。但是,使用點語法訪問屬性時需要正確的類型。

+0

謝謝你,我會提高你的答案,但我沒有足夠的積分來這樣做。 – Woodstock

相關問題