2012-09-17 1 views
3

, 수의 매개 변수들이 있어 비록도 가능 걸릴변수 수 -이 필요합니다 ("개체 메시징"섹션에서) 예를 들어 <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html" rel="nofollow">Objective C Programming Guide</a>에서

방법 다소 드물다. 추가 매개 변수는 메서드 이름 끝에 쉼표로 구분됩니다 ( ). (. 콜론 달리 쉼표 이름 간주 일부가 아닌) 다음 예에서, 가상 makeGroup : 방법은 하나 개의 필수 파라미터 (군) 및 선택적 세 파라미터를 전달한다 :

[수신기 makeGroup : group, memberOne, memberTwo, memberThree];

나는 그런 방법을 만들려고 그것은 오류를 보여줍니다

"예상 ';' 메소드 프로토 타입 이후 "

내 인터페이스 파일 (.h 파일)에서 아래 함수를 선언하려고 시도합니다.

- (void) printMyClass: (int) x, (int) y, (int) z; 

사람이 makeGroup

가변 인자와 방법을 선언하는 당신에게

+0

고정 된 N 개의 매개 변수 만 필요하거나 변수 N (예 : x, y, z 그리고 아마도 그 이후의 글자?)? –

+1

[Technical Q & A 1405,'+ \ [NSString stringWithFormat : \]?] (http://developer.apple.com/library/mac/#qa)와 같이 가변 인수를 취하는 메소드는 어떻게 작성합니까? /qa1405/_index.html) –

+0

[Objective-C의 가변 길이 매개 변수] 가능한 중복 (http://stackoverflow.com/questions/5458428/variable-length-parameters-in-objective-c) –

답변

14

당신은이 link을 볼 수 있습니다. 헤더 파일에서

-(void)yourMethods:(id)string1, ...{ 

    NSMutableArray *arguments=[[NSMutableArray alloc]initWithArray:nil]; 
    id eachObject; 
    va_list argumentList; 
    if (string1) 
    { 
     [arguments addObject: string1]; 
     va_start(argumentList, string1); 
     while ((eachObject = va_arg(argumentList, id)))  
     { 
      [arguments addObject: eachObject]; 
     } 
     va_end(argumentList);   
    } 
    NSLog(@"%@",arguments); 
} 

지금 당신의 메서드를 호출 방법 본체 쓰기 말

-(void)yourMethods:(id)string1,...; 

에서 그리고 구현 파일 당신에게 세 가지 점 방법을 정의

[self yourMethods:@"ab",@"cd",@"ef",@"gf",nil]; 

참고 : nil 끝을 기억하십시오.

+0

에 대한 답변을 주셔서 감사합니다. 그래서, 메서드에서 여러 매개 변수를 구현하는 "NSMutableArray"사용해야합니까? – Confused

+0

죄송합니다. 귀하의 질문에 대한 이해가 부족합니다. 메서드 또는 메서드의 본문 내부에서 호출 할 수있는 동안 배열을 변경할 수 있습니까? ... expalination이 수행 된 위의 링크를 볼 수 있습니다. – Neo

+0

죄송합니다. 약간 혼란 스럽습니다. 그래서 yourMethods 메서드와 methodWithVariableParameters 메서드는 동일합니까? – Confused

0

구문을 감사처럼 이러한 방법을 만들 수있는 샘플 예를 들어 줄 수있는 것은 다음과 같이이다 :

- (void) printMyClass: (int) x, ...; 

하나의 인수가 항상 최소값이어야하며 다른 인수는 va_arg 함수 그룹을 통해 액세스 할 수 있습니다. 자세한 내용은 this tutorial을 참조하십시오.