這行代碼是做什麼的?MyObject * objectOne =(MyObject *)recognizer.view;
MyObject *objectOne = (MyObject *)recognizer.view;
我對(MyObject *)
感到困惑。
它是否有效地將recognizer.view
指針指向MyObject
?
謝謝。
這行代碼是做什麼的?MyObject * objectOne =(MyObject *)recognizer.view;
MyObject *objectOne = (MyObject *)recognizer.view;
我對(MyObject *)
感到困惑。
它是否有效地將recognizer.view
指針指向MyObject
?
謝謝。
是(MyObject *)
靜態鑄造recognizer.view
這是一個UIView
到MyObject
。這使您可以調用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);
該行代碼將recognizer.view
轉換爲MyObject
類型。這將允許您使用點.
語法訪問MyObject
的屬性。
由於Objective C是一種動態類型化語言,所以類型轉換不如強類型語言重要。即使不將變量強制轉換爲MyObject*
類型,也可以使用方括號語法調用方法和訪問屬性。但是,使用點語法訪問屬性時需要正確的類型。
謝謝你,我會提高你的答案,但我沒有足夠的積分來這樣做。 – Woodstock
它不會投射到MyObject類型的對象。 – Harish