2011-01-19 5 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

はい別の方法があります。列挙型では、すべての「もの」は整数に関連付けられています。したがって、方法のidthingまたはintに変更すると、警告なしで機能するはずです。これが私のやり方です。 ;-)

+0

ありがとう!これは助けになりました。 –

3

withThing:引数にidの代わりに列挙型の名前を使用できます。その後、tからキャストを取り除くことができます。

また、列挙に大文字の名前を使用することをお勧めします。

+0

ありがとう!あなたとサンドロの回答の一部が答えの一部をしているようです。私は列挙型がSomethingViewController.hではなく、別のクラスにあることを明確にすべきです。列挙名を使用するとコンパイルされません。 SomethingViewController.hは "物"の後に ")"が来ると予想していると言っています。とにかく、intに変更してキャストを取り除くのはやりました。両方の答えにクレジットを与える方法はありませんか? –

+0

これが当てはまる場合は、Globalsという別のクラスを作成し、その列挙をそこに格納することができます。その後、そのクラスをインポートして呼び出したり呼び出したりする必要があります。 (複数の回答が好きな人は、上の投票は完全に大丈夫です。) –

+0

私はupvoteに十分な評判はありませんが、私はここに戻って私ができる分をアップアップします。再度、感謝します。 –

関連する問題