2011-01-19 2 views
2

내 SomeClass.hViewController에서 하위 클래스의 메서드에 열거 형을 전달하는 방법은 무엇입니까? 캐스트없이 정수의 포인터를 만드는 :

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

예 다른 방법이 있습니다. 열거 형에서 모든 "물건"은 정수와 연관됩니다. 따라서 thing 또는 int으로 사용자의 방법에서 id을 변경하면 경고없이 작동합니다. 이것이 내가 항상하는 방식입니다. ;-)

+0

감사! 이것은 도움이되었습니다. –

3

withThing : 인수에 id 대신 열거 형 이름을 사용할 수 있습니다. 그런 다음 t에서 캐스트를 제거 할 수 있습니다.

또한 열거 형에 대문자 이름을 사용하는 것이 좋습니다.

+0

고마워! 그것은 당신과 산드로의 대답의 일부가 대답의 일부였던 것 같습니다. 열거 형은 SomethingViewController.h가 아니라 다른 클래스에 있음을 명확히해야합니다. 열거 이름을 사용하면 컴파일되지 않습니다. SomethingViewController.h는 "thing"다음에 ")"이 올 것이라고 예상했다. 어쨌든 int로 변경하고 캐스트를 제거하는 것이 트릭을 만들었습니다. 두 가지 답을 모두 적을 방법이 없습니까? –

+0

이 경우 Globals라는 또 다른 클래스를 만들고 거기에 열거 형을 저장할 수 있습니다. 그런 다음 해당 클래스를 가져 와서 열거를 호출하거나 액세스해야합니다. (또한 하나 이상의 답변을 원한다면 최대 투표는 완벽합니다.) –

+0

나는 upvote에 대한 충분한 명성을 얻지 못했지만 여기로 돌아와 내가 할 수있는 분을 당신에게 upvote 할 것입니다. 다시 한번 감사드립니다. –

관련 문제