[머릿말]
Python에서는 아스키 코드를 문자로 변환하거나 문자를 아스키 코드로 변환하는 것이 chr( ), ord( ) 함수만 사용하면 됐기에 매우 간단했었다. Swift에서 변환하는 방법은 아직 익숙하지 않음에 따라 계속 찾아보게 될 것 같아 따로 정리를 하게 되었다.
1. 문자 -> ASCII Code(숫자) 변환
1-1. (문자).asciiValue
var a: Character = "a"
print(a.asciiValue) // Optional(97)
print(a.asciiValue!) // 97
- String 타입에는 사용할 수 없고 오직 Character 타입에만 사용할 수 있다.
- 특정 문자에 대한 ASCII Code가 없을 수도 있으므로 반환 타입은 Optional 이다.
- Optional을 Unwrapping 하면 타입은 UInt8 이다.
1-2. (문자열).unicodeScalars
for i in "abcd".unicodeScalars {
print(i, i.value)
}
/*
* a 97
* b 98
* c 99
* d 100
*/
- unicodeScalars 는 Unicode scalar values의 콜렉션으로써 표현되는 문자열의 값이다.
- 문자열 내에서 원하는 인덱스의 문자에 .value 프로퍼티를 사용하면 ASCII Code 값을 확인할 수 있다.
- ASCII Code 값은 UInt32 타입으로 반환된다.
1-3. (문자열).utf8 or (문자열).utf16
for i in "abcd".utf8 {
print(i, type(of: i))
}
/*
* 97 UInt8
* 98 UInt8
* 99 UInt8
* 100 UInt8
*/
for i in "ABCD".utf16 {
print(i, type(of: i))
}
/*
* 65 UInt16
* 66 UInt16
* 67 UInt16
* 68 UInt16
*/
- .utf8 과 .utf16 프로퍼티는 문자열의 Unicode scalar value를 각각 UInt8 과 UInt16 타입으로 인코딩하여 반환한다.
2. ASCII Code(숫자) -> 문자 변환
2-1. UnicodeScalar(숫자)
let x = UnicodeScalar(65) // 65 -> "A"
print(x, type(of: x)) // Optional("A") Optional<Scalar>
print(String(x!), type(of: String(x!))) // A String
- 숫자(ASCII Code)에 대한 Scalar 값을 반환한다. 이때, 숫자가 ASCII Code의 범위를 벗어날 수 있으므로 정확한 반환 타입은 Optional<Scalar> 이다.
- 이를 String 타입으로 사용하고 싶다면 위 예제처럼 String( ) 을 사용하면 된다.
단순 ASCII Code <-> 문자를 변환하는 것도 뭔가 애플스러움(?)이 있는 것 같다...🤣
정리해놓았으니 헷갈릴 때마다 다시 와서 확인해야겠다.
끝!
참고) https://hio9105.tistory.com/entry/Swift-Ascii-Code%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0
'[Programming Language] > [Swift]' 카테고리의 다른 글
[Swift] String.allSatisfy(_:) 함수란? (0) | 2024.09.23 |
---|---|
[Swift] SubSequence(ArraySlice)를 그냥 사용하는 것과 저장하고 사용하는 것의 속도 차이가 발생하는 이유는? (1) | 2024.09.22 |
[Swift] @discardableResult - 반환값 무시 (0) | 2024.08.21 |
[Swift] 선언형 프로그래밍 vs 명령형 프로그래밍 (0) | 2024.08.20 |
[Swift] 열거형(enum: Enumerations) 총 정리 (3) | 2024.07.22 |