카테고리: iOSIT

#10 iOS 개발 문자열 enumerateSubstrings 이해하기

개요

Swift와 Objective-C 프로그래밍 언어는 현대적인 기능과 효율적인 문자열 처리를 위한 툴을 제공합니다. 이 중 String 타입의 enumerateSubstrings 메소드는 문자열의 특정 부분을 열거하고, 각각에 대해 사용자가 정의한 클로저를 실행하면서 이를 가능하게 합니다. 이 메소드는 문자열 처리를 위한 Swift의 강력한 기능 중 하나로, 범위 지정부터 세부 옵션 설정까지 유연성을 제공합니다.

enumerateSubstrings 메소드의 역할

개발자들이 문자열의 세분화된 부분을 쉽게 다룰 수 있게 해주는 메소드입니다. 문자열의 범위를 지정하고, String.EnumerationOptions를 통해 열거 방식을 세밀하게 제어할 수 있습니다. 이 메소드는 Swift에서 문자열 분석의 백본 역할을 하며, 복잡한 문자열 조작 작업을 단순화합니다.

enumerationOptions 사용하기

문자열 열거 시 사용되는 옵션으로, 문자열을 어떻게 분할할지 결정하는 데 중요한 역할을 합니다. 여기에는 다음과 같은 옵션이 포함됩니다:

.byLines: 줄 단위로 문자열을 나눕니다. 각 줄은 줄 바꿈 문자로 구분됩니다.
.byParagraphs: 문단 단위로 문자열을 나눕니다. 문단은 하나 이상의 연속된 줄 바꿈 문자로 구분됩니다.
.byComposedCharacterSequences: 문자열을 인식 가능한 문자 단위로 나눕니다, 예를 들어 조합형 문자 같은 복잡한 문자 시퀀스도 올바르게 처리합니다.
.byWords: 단어 단위로 문자열을 나눕니다. 단어는 공백이나 구두점으로 구분됩니다.
.bySentences: 문장 단위로 문자열을 나눕니다. 문장은 마침표, 느낌표, 물음표 등으로 구분됩니다.
.reverse: 문자열을 역순으로 열거합니다. 이는 다른 옵션과 결합하여 사용할 수 있습니다.
.substringNotRequired: 부분 문자열을 생성하지 않고 열거 작업을 수행할 수 있습니다, 성능이 향상될 수 있습니다.
.localized: 로케일에 따른 규칙을 적용하여 문자열을 나눕니다

Objective-C 버전

NSStringEnumerationByLines: 문자열을 줄 단위로 나눕니다. 각 줄은 줄 바꿈 문자로 구분됩니다.
NSStringEnumerationByParagraphs: 문단 단위로 문자열을 나눕니다. 문단은 하나 이상의 연속된 줄 바꿈 문자에 의해 구분됩니다.
NSStringEnumerationByComposedCharacterSequences: 문자열을 인식 가능한 문자 단위로 나눕니다, 예를 들어 조합형 문자 같은 복잡한 문자 시퀀스도 올바르게 처리합니다.
NSStringEnumerationByWords: 문자열을 단어 단위로 나눕니다. 단어는 공백이나 구두점으로 구분됩니다.
NSStringEnumerationBySentences: 문자열을 문장 단위로 나눕니다. 문장은 마침표, 느낌표, 물음표 등으로 구분됩니다.
NSStringEnumerationReverse: 문자열을 역순으로 열거합니다. 이는 다른 옵션과 결합하여 사용할 수 있습니다.
NSStringEnumerationSubstringNotRequired: 부분 문자열을 만들지 않고 열거 작업을 수행할 수 있습니다, 이로 인해 성능이 향상될 수 있습니다.
NSStringEnumerationLocalized: 로케일에 따른 규칙을 적용하여 문자열을 나눕니다.

enumerateSubstrings 활용 예시

각 언어에서 사용하는 간단한 예를 들어보겠습니다

let string = """
    1. Hellow Swift's example.
    2. Hi, Swift
    """
let range = string.startIndex..<string.endIndex
string.enumerateSubstrings(in: range, options: .localized) { substring, substringRange, enclosingRange, stop in
    if let substring = substring {
        print("result : \(substring)")
    }
}
NSString *string = @"1. Hellow Swift's example.\n2. Hi, Swift";
NSRange range = NSMakeRange(0, [string length]);

[string enumerateSubstringsInRange:range options:NSStringEnumerationByWords usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    NSLog(@"Found substring: %@", substring);
}];

이 코드는 문자열 안에서 단어를 열거하고, 발견된 각 단어를 출력합니다. Swift의 클로저는 코드 블록을 간결하고 읽기 쉬운 형태로 만들어 줍니다. 아래는 각 옵션별 항목의 출력 결과물 입니다. 작성된 텍스트에 따라 다르게 출력 될 수 있다는 점 참고 해주시기 바라며, Swift Playground를 통하여 출력을 진행 했습니다.

//.byLines
result : 1. Hellow Swift's example.
result : 2. Hi, Swift

// .byParagraphs
result : 1. Hellow Swift's example.
result : 2. Hi, Swift

// .byComposedCharacterSequences
result : 1
result : .
result :  
result : H
result : e
result : l
result : l
result : o
result : w
result :  
result : S
result : w
result : i
result : f
result : t
result : '
result : s
result :  
result : e
result : x
result : a
result : m
result : p
result : l
result : e
result : .
result : 

result : 2
result : .
result :  
result : H
result : i
result : ,
result :  
result : S
result : w
result : i
result : f
result : t

// .byWords
result : 1
result : Hellow
result : Swift's
result : example
result : 2
result : Hi
result : Swift

// .bySentences
result : 1. 
result : Hellow Swift's example.

result : 2. 
result : Hi, Swift

// .reverse
result : 2. Hi, Swift
result : 1. Hellow Swift's example.

// .localized
해당 옵션은 언어 규칙에 따라 문자열을 분할하고자 할 때 유용합니다. 이 옵션을 사용하면, 예를 들어, 단어의 경계를 찾거나 문장을 나눌 때 다양한 언어의 특정 규칙을 적용할 수 있습니다.

예를 들어, 영어와 터키어에서는 같은 문자가 다르게 취급될 수 있으며, .localized 옵션은 이러한 차이를 인식하고 적절하게 문자열을 분할합니다.

// .substringNotRequired
문자열의 실제 내용이 필요하지 않을 때 성능을 최적화하기 위해 부분 문자열 생성을 생략하는 데 사용됩니다. 대신에 범위만 가지고 작업을 수행하여, 단어가 존재한다는 사실을 판단할 때 사용 되기도 합니다.

결론

iOS 문자열의 enumerateSubstrings 메소드는 문자열 처리를 위한 강력하면서도 유연한 도구입니다. String.enumerationOptions와 함께 사용하면, 문자열을 다양한 방식으로 쉽게 쪼개고 각 부분에 대한 작업을 정교하게 수행할 수 있습니다. iOS 개발자에게는 이 메소드가 문자열 처리의 중심적인 역할을 하며, 앱 개발에 있어서 빼놓을 수 없는 핵심 기능입니다.

SOOAR

최근 게시물

실업급여 최대한 활용하는 법 2024년 최신 정보 완벽 정리

실업급여는 일자리를 잃은 후 경제적 어려움을 겪고 있는 분들에게 큰 도움이 되는 제도로, 고용보험에 가입한…

% 수일전에

제4이동통신사 스테이지엑스 자격 취소와 법적 대응

스테이지엑스의 제4이동통신사 자격이 자본금 부족 문제로 과기정통부에 의해 취소될 위기에 처했습니다. 스테이지엑스는 법적 대응을 예고하며…

% 수일전에

삼성전자 접근성 기능의 모두를 위한 기술 활용법

삼성전자는 저시력자와 청각 장애인을 위한 다양한 접근성 기능을 제공합니다. 릴루미노 윤곽선, 토크백, 실시간 자막, 주변…

% 수일전에

iOS Swift UILabel 둥근 모서리를 적용 해보자

iOS 앱 개발에서 UILabel 둥근 모서리 뷰의 시각적 요소를 조정하는 것은 사용자 경험을 향상시키는 중요한…

% 수일전에

프리랜서 고용 시 체크리스트 4가지 반드시 확인해야 할 필수 사항들

프리랜서 고용 시 체크리스트는 뭘까? 프리랜서를 고용하는 것은 많은 기업과 개인에게 유용한 방법이 될 수…

% 수일전에