문자열과 문자(Strings and Characters) - 문자 카운팅 (Counting Characters)

00yhsp·2024년 4월 2일

문자열에서 Character 값의 카운트를 구하려면 문자열에서 count 프로퍼티를 사용한다.

let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
print("unusualMenagerie has \(unusualMenagerie.count) characters")
// Prints "unusualMenagerie has 40 characters"

Swift에서 Character값을 위한 확장된 문자소 클러스터 사용은 문자열 카운트에 영향을 주지 않는다.
예를 들어, 4개의 문자 단어인 cafe로 새로운 문자열을 초기화하고 문자열 끝에 COMBINING ACUTE ACCENT(U+0301)을 추가하면 결과 문자열은 4번째 문자가 e가 아닌 é가 되고 여전히 문자 카운트는 4이다.

var word = "cafe"
print("the number of characters in \(word) is \(word.count)")
// Prints "the number of characters in cafe is 4"

word += "\u{301}"    // COMBINING ACUTE ACCENT, U+0301

print("the number of characters in \(word) is \(word.count)")
// Prints "the number of characters in café is 4"

Note:
확장된 문자소 클러스터는 여러 개의 유니코드 스칼라로 구성할 수 있다.
이것은 다른 문자와 같은 문자의 다른 표기법은 저장할 때 메모리 사용량이 다르게 요구될 수 있다는 의미이다.
이 때문에 Swift의 문자는 각각 문자열에서 동일한 양의 메모리를 차지하지 않는다.
그 결과 문자열의 문자 개수는 확장된 문자소 클러스터 경계를 결정하기 위해 문자열을 반복하지 않고는 계산할 수 없다.
특히 긴 문자열 값으로 작업하는 경우에 해당 문자열의 문자를 결정하려면 count 프로퍼티가 전체 문자열의 유니코드 스칼라를 반복해야 한다.
count 프로퍼티로 반환된 문자의 개수는 같은 문자여도 NSString의 length 프로퍼티와 항상 같지 않다.
NSString의 길이는 문자열 내 유니코드 확장된 문자소 클러스터 수가 아니라 문자열의 UTF-16 표현 내의 16비트 코드 단위 수를 기반으로 한다.

profile
iOS Dev

0개의 댓글