Formatting String Objects

OSXDEV

Jump to: navigation, 찾기

이 글은 포맷 스트링을 사용하여 스트링을 생성하는 법, 포맷 스트링에서 비 ASCII 캐릭터를 사용하는 법, NSLog나 NSLogv를 사용할때 개발자들이 범하는 흔한 실수에 대해 설명합니다.

[편집] Formatting Basics

NSString은 다른 포맷터 객체와 신택스가 비슷한 포맷 스트링을 사용합니다. ANCI C 함수인 printf()에서 정의된 포맷 캐릭터를 지원하며 객체를 위해 %@도 지원합니다. ( "String Format Specifiers"IEEE printf specification을 읽어보십시오.) 만일 객체가 descriptionWithLocale: 메시지에 응답한다면, NSString은 그 메시지를 사용하여 텍스트 표현을 얻어옵니다. 그렇지 않은 경우 description 메시지를 보냅니다. Strings Files에서 로컬라이즈드 스트링의 사용방법과 변수의 순서를 바꾸는 방법을 설명합니다.

포맷 스트링에서, '%' 캐릭터는 값의 위치를 지정하며, 그 후에 나타나는 캐릭터는 예상되는 값의 종류와 포맷하는 방법을 결정합니다. 예를 들어, 스트링 표현인 "%d houses"는 포맷 표현 '%d' 의 위치에 정수 값이 대치될 것입니다. NSString은 ANSI C 함수인 printf()에서 정의한 포맷 캐릭터와 객체의 '@'도 지원합니다. 만일 객체가 descriptionWithLocale 메시지에 응답하는 경우 NSString은 이 메시지를 보내 텍스트 표현을 얻어오며 그렇지 않은 경우 description 메시지를 보냅니다.

값 포맷팅은 사용자의 현재 지역(locale) 설정에 영향을 받습니다. 지역은 NSDictionary 객체로 숫자, 날짜, 그 밖의 다른 포맷을 지정합니다. NSString은 (NSDecimalSeparator라는 키로 주어지는) NSDecimalSeparator의 지역별 정의만을 사용합니다. 만일 지역을 지정하지 않는 메소드를 사용한다면 스트링은 기본 지역을 가정합니다.

NSString의 stringWithFormat: 메소드와 다른 관련된 메소드를 사용하여 Creating and Converting String Objects에 나타난 것처럼 스트링을 printf 스타일 포맷 지시자와 인자 목록을 사용하여 스트링을 생성할 수 있습니다. 아래의 예는 다양한 포맷 지시자와 인자를 사용하여 스트링을 만드는 방법을 보여줍니다.


NSString *string1 = [NSString stringWithFormat:@"A string: %@, a float: %1.2f",
        @"string", 31415.9265];
// string1 is "A string: string, a float: 31415.93"
 
NSNumber *number = [NSNumber numberWithInt:1234];
NSDictionary *dictionary = [NSDictionary dictionaryWithObject:[NSDate date]
        forKey:@"date"];
NSString *baseString = @"Base string.";
NSString *string2 = [baseString stringByAppendingFormat:
        @" A number: %@, a dictionary: %@", number, dictionary];
// string2 is "Base string. A number: 1234, a dictionary: {date = 2005-10-17 09:02:01 -0700; }"

[편집] Strings and Non-ASCII Characters

stringWithFormat:과 stringWithUTF8String: 메소드를 사용하여 스트링에서 유니코드를 포함한 비 ASCII 캐릭터를 사용할 수 있습니다.


NSString *s = [NSString stringWithFormat:@"Long %C dash", 0x2014];

\xe2\x80\x94은 0x2014의 3-byte UTF-8 스트링이므로 string for 0x2014, 다음과 같이 쓸 수 있습니다.


NSString *s = [NSString stringWithUTF8String:"Long \xe2\x80\x94   dash"];


소스 코드 내에 하이-비트 캐릭터를 포함시키는 것은 안전하지 않습니다.


NSString *s = [NSString stringWithUTF8String:"Long — dash"];
NSString *s = @"Long — dash";    // Not allowed


[편집] NSLog and NSLogv

유틸리티 함수인 NSLog()와 NSLogv()는 NSString의 스트링 포맷팅 서비스를 에러 메시지를 로그하는데 사용합니다. 이 결과로 이들 함수에 인자를 지정해줄때 주의해야할 필요가 있게 됩니다. 흔히 범하는 실수로는 아래 예처럼 포맷팅 캐릭터를 포함하는 스트링을 지정하는 것입니다.


NSString *string = @"A contrived string %@";
NSLog(string);
// The application will probably crash here due to signal 10 (SIGBUS)


아래 예처럼 포맷 스트링을 다른 스트링에 출력하도록 하는 것이 더 좋습니다. (더 안전합니다.)


NSString *string = @"A contrived string %@";
NSLog(@"%@", string);
// Output: A contrived string %@


< Previous Page Next Page >



번역자 사용자:Idiel
원본문서링크 http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/FormatStrings.html (Last Updated - 2007-10-18)