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 |