2011-01-19 50 views
2

我SomeClass.h如何將枚舉傳遞給子類中的方法(來自ViewController)?

typedef enum thing {stuff, foo, bar, etc} thing; 

@interface SomeClass : UIView { 
    NSNumber *aNumber; 
    thing aThing; 
} 

我SomethingViewController.m

-(void)doSomething:(NSNumber *)n 
     withThing:(id)t 
{ 
    SomeClass *class = [[SomeClass alloc] initWithFrame:aRect]; 
    [class setAThing:(thing)t]; 
    [class setANumber:n]; 
} 

-(void)viewDidLoad 
{ 

[self doSomething:[NSNumber numberWithInt:2] withThing:foo]; 

這似乎從一個關於withThing警告做工精細,除了:使從一個整數的指針不進行強制轉換。

我想我的問題是:我做對了嗎?有沒有另一種方式不會給我這個警告?

回答

3

是的,還有另外一種方法。在一個枚舉中,所有的「事物」都與一個整數相關聯。因此,如果將您的方法中的id更改爲thingint,它應該沒有警告地工作。這是我一直這樣做的方式。 ;-)

3

您可以在您的withThing:參數中使用枚舉的名稱而不是id。然後你可以從t中刪除陣容。

此外,我建議使用大寫的名字進行枚舉。

+0

謝謝!看起來你和桑德羅的答案都有部分答案。我應該澄清一下,枚舉不在SomethingViewController.h中,而是在另一個類中。使用枚舉名稱不會編譯。 SomethingViewController.h表示它預計在「thing」之後有一個「)」。無論如何,更改爲int並刪除演員的伎倆。有沒有辦法給兩個答案信貸? – 2011-01-19 16:29:18

+0

如果是這樣,那麼您可以創建另一個名爲Globals的類,並將枚舉存儲在那裏。然後,在需要調用或訪問枚舉的任何位置導入該類。 (另外,如果你喜歡不止一個答案,增​​加投票是完全可以的。) – 2011-01-19 16:33:36

相關問題