ProgramingTip

Objective-C에서 변수 인수 메서드를 만드는 방법

bestdevel 2020. 12. 14. 20:35
반응형

Objective-C에서 변수 인수 메서드를 만드는 방법


아마도 이것은 대부분의 사람들에게 분명히 간단하게 할 것입니다.하지만 메서드 (Objective-C에서)와 C로 함수를 만들어 NSString's stringWithFormat:또는 NSLog().

알림 :

[NSString stringWithFormat:@"example tekst %i %@ %.2f", 122, @"sth", 3.1415"];
NSLog(@"account ID %i email %@", accountID, email);

나는에 만들 만들 NSString의 방법을 stringWithFormat:, NSURL - urlWithFormat.


일반적으로 "가변 함수"(또는 메서드)라고합니다.

만들려면 다음이를 같이 메서드 선언을으로 끝내 십시오 , ....

- (void)logMessage:(NSString *)message, ...;

시점에서 당신이은 아마 printf보기 처음부터 그것들 중 하나를 구현하는 것이 최선의 시도이기 때문에 유사한 함수로 그것을 감싸고 싶을을 구석으로입니다 .

- (void)logMessage:(NSString *)format, ... {
  va_list args;
  va_start(args, format);
  NSLogv(format, args);
  va_end(args);
}

의 사용에주의 NSLogv하지를 NSLog; NSLog(NSString *, ...);vs를 고려 NSLogv(NSString *, va_list);표현을 표현;

initWithFormat:arguments:NSString *.


반면에 많이로 작업하는 것이 아니라

+ (NSArray *)arrayWithObjects:(id)object, ... NS_REQUIRES_NIL_TERMINATION;

일이 훨씬 낫습니다.

이 경우, vprintf스타일 함수 대신을 통과하는 루프를 사용 args하고 ID를 가정하고 모든 루프 에서처럼 구문 분석하십시오.

- (void)logMessage:(NSString *)format, ... {
  va_list args;
  va_start(args, format);

  id arg = nil;
  while ((arg = va_arg(args,id))) {
  /// Do your thing with arg here
  }

  va_end(args);
}

물론이 마지막 샘플은 va_args 목록이 nil로 끝나는 것은 가정합니다.

참고 : 이 작업을하기 위해 수도 포함 해야을 <stdarg.h>; 그러나 메모리가 제공되는 경우 이는 NSLogv와 관련하여 포함됩니다. 즉, "Foundation.h"를 통해 다운되는 "AppKit.h"및 "Cocoa.h"뿐만 아니라 여러 항목도 포함됩니다. 그래서 이것은 상자에서 작동합니다.


- (void)methodWithFormat:(NSString*)format, ... {
  va_list args;
  va_start(args,format);
  //loop, get every next arg by calling va_arg(args,<type>)
  // e.g. NSString *arg=va_arg(args,NSString*) or int arg=(args,int)
  va_end(args);
}

stringWithFormat :에 변수 인수를 전달하신 다음과 같이 사용하십시오.

NSString *s=[[[NSString alloc] initWithFormat:format arguments:args] autorelease];

여기서 언급해야 할 매개 변수는 여기서 첫 번째 항목 NSString 인수는 변수가 전달되고 전달받는 것입니다. 권리? for 루프에 포함되는 경우 처리 할 변수가 하나 있습니다.

- (NSString *) append:(NSString *)list, ...
{
    NSMutableString * res = [NSMutableString string];
    [res appendString:list];

    va_list args;
    va_start(args, list);
    id arg = nil;

    while(( arg = va_arg(args, id))){
        [res appendString:arg];
    }
    va_end(args);
    return res;
}

- (void) test_va_arg
{
    NSString * t = [self append:@"a", @"b", @"c", nil];
    STAssertEqualObjects(@"abc", t, @"");
}

참고 URL : https://stackoverflow.com/questions/4804674/how-to-create-variable-argument-methods-in-objective-c

반응형