[objective-c] Objective-C에서 여러 매개 변수를 전달하려면 어떻게합니까?

Objective-C 메서드 구문에 대한 몇 가지 게시물을 읽었지만 메서드의 여러 이름을 이해하지 못하는 것 같습니다.

getBusStopswith NSStringNSTimeIntervalparameters 및 반환 유형 의을 (를) 호출하는 메서드를 만들려고합니다 NSMutableArray. 이것이 내가 메소드를 구성한 방법이지만 런타임에 분명히 오류가 발생합니다.

- (NSMutableArray *)getBusStops:(NSString *)busStop
                                (NSTimeInterval *)timeInterval;

방법이있는 또 다른 예를 보았습니다.

-(NSInteger)pickerView:(UIPickerView *)pickerView
            numberOfRowsInComponent:(NSInteger)component

이 메소드에 왜 각 매개 변수의 메소드 이름이 있는지 이해가되지 않습니다. 다음과 같은 작업을 수행해야합니다.

- (NSMutableArray *)getBusStops:(NSString *)busStop
                        forTime:(NSTimeInterval *)timeInterval



답변

Objective-C에는 명명 된 매개 변수가 없으므로 콜론 왼쪽의 모든 것은 메소드 이름의 일부입니다. 예를 들어

getBusStops: forTime:

메소드의 이름입니다. 이름이 더 잘 설명되므로 더 설명하기 쉽습니다. 당신은 단순히 방법의 이름을 지정할 수 있습니다

getBusStops: :

그러나 그것은 두 번째 매개 변수에 대해 많이 알려주지 않습니다.


답변

최소한 각 매개 변수 이름을 “:”으로 구분해야합니다. 기술적으로 이름은 선택 사항이지만 가독성을 위해 권장됩니다. 그래서 당신은 쓸 수 있습니다 :

- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;

또는 당신이 제안한 것 :

- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;


답변

예; Objective-C 메소드 구문은 몇 가지 이유로 이와 같습니다. 이 중 하나는 지정하는 매개 변수가 무엇인지 명확하게하기위한 것입니다. 예를 들어 NSMutableArray특정 색인에 객체를 추가하는 경우 다음 방법을 사용하여 수행합니다.

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

이 방법을 호출 insertObject:atIndex: 되고 오브젝트가 지정된 인덱스에 삽입되고 있음이 분명합니다.

실제로 “Hello, World!”라는 문자열을 추가하면 NSMutableArray호출 된 인덱스 5에서 array다음과 같이 호출됩니다.

NSString *obj = @"Hello, World!";
int index = 5;

[array insertObject:obj atIndex:index];

또한 메소드 매개 변수 순서 사이의 모호성을 줄여서 오브젝트 매개 변수를 먼저 전달한 다음 색인 매개 . 이는 많은 수의 인수를 사용하는 함수를 사용할 때 더 유용하며 인수 전달시 오류를 줄입니다.

또한 Objective-C는 오버로딩을 지원하지 않기 때문에 메소드 명명 규칙이 적용됩니다. 그러나 동일한 작업을 수행하지만 다른 데이터 유형을 사용하는 메소드를 작성하려는 경우이를 수행 할 수 있습니다. 예를 들어 NSNumber수업을 들으십시오. 여기에는 다음과 같은 여러 가지 객체 생성 방법이 있습니다.

  • + (id)numberWithBool:(BOOL)value;
  • + (id)numberWithFloat:(float)value;
  • + (id)numberWithDouble:(double)value;

C ++와 같은 언어에서는 단순히 숫자 메소드를 오버로드하여 다른 데이터 유형을 인수로 전달할 수 있습니다. 그러나 Objective-C에서이 구문을 사용하면 함수의 각 변형에 대한 메소드 이름을 변경하여 동일한 함수의 여러 변형을 구현할 수 있습니다.


답변

각 매개 변수 앞의 텍스트 는 메소드 이름의 일부 입니다. 귀하의 예에서 메소드의 이름은 실제로

-getBusStops:forTime:

각 : 인수를 나타냅니다. 메소드 호출에서 메소드 이름은 : s로 분할되고 인수는 : seg 뒤에 나타납니다.

[getBusStops: arg1 forTime: arg2]


답변

메소드 작성의 경우 :

-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second {
//method definition...
}

메소드를 호출하십시오.

[mymethods:self.contoCorrente withsecond:self.asecond];


답변

(int) add: (int) numberOne plus: (int) numberTwo ;
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa

나를:

(returnTypeOfSecontArgument) secondArgumentName ;

다른 언어에서와 같이 다음 구문 void를 사용 add(int one, int second)
하지만 인수를 할당하는 방법은 OBJ_c위에서 설명한 것과 다릅니다.


답변