2011-05-12 33 views
0

我有一個從UIView定義的類的集合。obj-C/Cocoa將未知類的參數(但共同的親子關係)傳遞給方法。可能?

@interface { 

UIView *thisView 
UIView *thatView 

} 

...

thisView *viewOne = [[thisView alloc] init]; 
thatView *viewTwo = [[thatView alloc] init]; 

現在,說我要創造條件,把這些對象和調用一個函數是共同的他們兩個,也可以設置常用的參數和做各種的方法不知道的事情,如果他們是不同的類(假設他們是非常不同的),我如何將這些對象傳遞給它?

[self exampleMethod:viewOne]; 
[self exampleMethod:viewTwo]; 

- (void)exampleMethod:(UIView *)viewNumber //will this suffice? 
{ 
    [viewNumber anotherMethod]; 

...

+1

你的代碼無效Objective-C ...你可以清理它,使它更有意義嗎? – 2011-05-12 20:33:29

+0

如果通過'親子'你的意思是兩個對象共享相同的超類,爲什麼不讓你的方法,而不是'UIView'的類的對象? – 2011-05-12 20:52:24

回答

1

兩個最常見的做法是:

  1. 做一個UIView子類(exampleClass),它包含所有的 「共同的東西」 - 方法,屬性等 - 然後將您的thisViewthatView類定義爲exampleClass的子類。然後,您可以使用exampleClass作爲您的exampleMethod中的參數。

  2. 創建一個protocol,然後讓thisViewthatView實現該協議。

這兩種技術都是Objective-C(以及面向對象編程)的基礎,在投入大量時間編寫代碼之前,可能值得進一步瞭解它們。

1

如果有迴應你打算髮送的郵件,一個共同的父類,你可以鍵入變量作爲。否則,您可以創建一個指定通用接口的協議。

1

如果你想使用通用對象,你可以檢查他們是否迴應你想要執行的消息。然後執行該消息。

id blah; 

if ([blah respondsToSelector:@selector(someMethod:)]) 
{ 
    [blah performSelector:@selector(someMethod:) withObject:anObject]; 
} 

您例如

- (void)exampleMethod:(UIView *)viewNumber //will this suffice? 
{ 
    if ([viewNumber respondsToSelector:@selector(anotherMethod)]) 
    { 
     [viewNumber performSelector:@selector(anotherMethod)]; 
    } 

} 
相關問題