본문 바로가기
Swfit/코딩테스트

UnicodeScalar

by GGShin 2023. 11. 28.

Swift에서 Character는 한개 이상의 UnicodeScalar로 구성되어 있습니다.

 

Unicode는 숫자와 글자 (key & value)가 1:1로 맵핑된 형태의 코드입니다. 숫자 65는 대문자 A 이런 식으로 맵핑이 되어있습니다. 

전세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식입니다. 참고로 "U+"라는 접두어가 붙어 있으면 유니코드를 의미합니다. 

 

만일 특정 String을 unicode로  사용하고 싶다면, 

let myString = "A"
let scalar:Unicode.Scalar? = UnicodeScalar(myString)

 

UnicodeScalar 이니셜라이저 파라미터로 String을 넘겨주면 됩니다. 

Character는 파라미터로 넘길 수 없어서, String으로 변경한 다음 넘겨주면 됩니다.

 

Unicode는 숫자와 글자가 맵핑되어 있다고 하였으니, 숫자 값도 사용할 수 있겠죠?

let myChr: String = "A"
let uniVal = UnicodeScalar(myChr)?.value

 

value라는 프로퍼티로 숫자값에 접근할 수 있습니다.

 

UnicodeScalar 언제 사용할까요?

여러 경우가 있겠지만, 개인적으로는 A부터 Z까지의 알파벳의 각 개수를 카운트하는 배열을 만들 때 유용하게 사용하고 있습니다.

let start = UnicodeScalar("A").value
let end = UnicodeScalar("Z").value
var alphabetArr = Array(repeating: 0, count: Int(end - start) + 1)

let demoStr = "ABAASD"
for chr in demoStr {
    let target = UnicodeScalar(String(chr))?.value ?? 0
    alphabetArr[Int(target - start)] += 1
}
print(alphabetArr)
// [3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

 

각 알파벳의 unicode를 다 외우고 있기는 어려우니, UnicodeScalar를 사용하면 좋습니다.

알파벳들이 unicode에 연속적으로 배치되어 있다는 점을 이용할 수도 있구요.

 

더 좋은 사용 예시나 위 예시에 대한 더 나은 코드가 있다면 편하게 알려주시면 좋겠습니다 :)

반응형

'Swfit > 코딩테스트' 카테고리의 다른 글

String / Array 뒤집기  (1) 2023.11.29
String index 값 정수로 얻기  (2) 2023.11.28
입력 방법 및 자주 사용되는 functions  (0) 2023.11.25