본문 바로가기

프로그래밍/iOS

[iOS] NSString 초,중,종성 분리 Category

이번에 음절 비교를 위해서 만든 것

종성이 아에 없을때를 고려 안하고 만든 점이 있긴한데

로직에선 없으면 없는대로 비교하는 관계로 그냥 사용


@interface NSString (Sound)

/**

 *@brief 첫글자의 초성을 반환하는 함수

 *@return NSString 첫글자의 초성

 */

-(NSString*)getChoSeong;

/**

 *@brief 첫글자의 중성을 반환하는 함수

 *@return NSString 첫글자의 중성

 */

-(NSString*)getJungSeong;

/**

 *@brief 첫글자의 종성을 반환하는 함수

 *@return NSString 첫글자의 종성

 */

-(NSString*)getJongSeong;

typedef enum sound{CHO=1,JUNG,JONG}SOUND;                                           ///< ,,종을 구분하기 위한 enumerator

@end


@implementation NSString (Sound)

- (NSString *)getChoSeong

{

    NSArray* choSeong = [[NSArray alloc] initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",nil];

    NSInteger code = [self characterAtIndex:0];

    return choSeong[[self getSoundIndexWithUniCode:code withSound:CHO]];

}

-(NSString *)getJungSeong

{

    NSArray* jungSeong = [[NSArray alloc] initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",nil];

    NSInteger code = [self characterAtIndex:0];

    return jungSeong[[self getSoundIndexWithUniCode:code withSound:JUNG]];

    

}

-(NSString *)getJongSeong

{

    NSArray* jongSeong = [[NSArray alloc] initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@" ",@"",@"",nil];

    NSInteger code = [self characterAtIndex:0];

    return jongSeong[[self getSoundIndexWithUniCode:code withSound:JONG]];

    

}

/**

 *@brief 유니코드를 기반으로 , , 종성의 index값을 얻는 함수, array에서 실제 값을 얻기 위함

 *@param unicode 해당 글자의 unicode

 *@param sound 얻고 싶은 글자가 , , 종성인지 판단하는 변수

 *@return NSInteger , , 종성을 가져오기 위한 index

 */

-(NSInteger) getSoundIndexWithUniCode : (NSInteger) unicode withSound:(SOUND)sound

{

    if (unicode < 44032 && unicode > 55203)

    {

//        NSLog(@"한글이 아닙니다.");

        return 999;

    }

    NSInteger uniCode = unicode - 44032;

    NSInteger soundIndex;

    switch (sound) {

        case CHO:

            soundIndex = uniCode / 21 / 28;

            break;

        case JUNG:

            soundIndex = uniCode % (21 * 28) / 28;

            break;

        case JONG:

            soundIndex = uniCode % 28;

            break;

        default:

            soundIndex = uniCode / 21 / 28;

            break;

    }

    return soundIndex;

}


@end

'프로그래밍 > iOS' 카테고리의 다른 글

[iOS] facebook 로그인 버튼 붙이기  (0) 2017.03.27
[iOS] 숫자에 천단위 구분자(,) 넣어주기  (0) 2017.03.03
[iOS] NSString이 한글인지 아닌지 판별  (0) 2017.01.25
[iOS] slicing  (0) 2016.11.29
[iOS] bitcode  (0) 2016.11.29