카테고리: 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

최근 게시물

2025년 최신 신용점수 기준과 무료 조회 방법 신용점수 올리는 팁

2025년 최신 신용점수 기준 1,000점 만점! 신용점수 등급표, 무료 조회 방법과 신용점수 빠르게 올리는 꿀팁까지…

% 수일전에

2025 현물 금 vs KRX 금시장 vs 금 통장 시세 차이 분석

현물 금, 금통장, KRX 금시장… 도대체 뭐가 다를까? 👉 "어디서 금을 사야 가장 이득일까?"👉 "KRX…

% 수일전에

2025 전기기사 산업기사 시험일정 및 응시자격 총정리

전기 분야 취업과 승진을 준비 중이신가요? 전기기사와 전기산업기사는 전기 분야에서 필수로 요구되는 국가기술자격증입니다. 특히 전기안전관리자…

% 수일전에

2025 다자녀 자동차 취등록세 감면 혜택 안내

다자녀 자동차 취등록세 감면이란? 다자녀 자동차 취등록세 감면 혜택은 자녀를 두 명 이상 양육하는 가정의…

% 수일전에

저공해차 등록 혜택 조회 방법

저공해차 등록은 환경 보호와 경제적 혜택을 동시에 얻을 수 있는 중요한 과정입니다. 이번 글에서는 저공해차…

% 수일전에

2025 제주국제공항 주차장 정보와 요금 할인 적용 안내

제주국제공항 주차장 이용을 원하시나요? 제주국제공항을 방문할 계획이 있다면, 주차장 정보와 요금을 사전에 확인하는 것이 중요합니다.…

% 수일전에