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
'ProgramingTip' 카테고리의 다른 글
따옴표 삼중 따옴표로 묶인 여러 줄의 추가 들여 쓰기를 제거하는 방법은 무엇입니까? (0) | 2020.12.14 |
---|---|
MySQL 쿼리에서 UNION 및 LIMIT 작업 결합 (0) | 2020.12.14 |
CodeIgniter- 쿼리에 대한 ORDER BY (0) | 2020.12.14 |
자바 펼쳐의 날짜 구문 분석이 Safari와 Chrome에서 발행됩니다. (0) | 2020.12.14 |
Json.NET에서 키 목록을 얻으려면 어떻게해야합니까? (0) | 2020.12.14 |