문자열를 정수형으로? ( String -> Int )
알고리즘 문제를 풀다보면 Character나 String을 Int로 변환시켜야 하는 순간을 마주하게 된다.
이 때 가장 보편적인 방법으로는 Int()로 감싸서 값을 변환시키는 것이다.
let numbString: String = "2"
let numb = Int(numbString)
print(numb) // Optional(2)
// optional 형태로 반환되기 때문에 보통 옵셔널 바인딩을 하여 사용한다.
if let n = Int(numbString) {
// Int가 된 n을 활용하면 됨!
}
다만 이 경우 주의해야할 점이 있는데 String 형일 때만 Int( )를 바로 씌울 수 있다는 것이다.
numbString이 Character인 경우, Int( )를 씌운다면 compile error를 발생시키게 된다.
let numbString: Character = "2"
let numb = Int(numbString)
print(numb) // Compile Error
문자를 정수형으로? ( Character -> Int )
그렇다면 Character형을 Int로 변환하기 위해서는 어떤 방식을 사용해야 할까?
wholeNumberValue
이 때 사용해야하는 것이 "wholeNumberValue"이다.
공식 문서의 정의 부분을 먼저 살펴보자.
문자가 의미하는 숫자값을 반환해주는 데, 그 값이 whole number이어야 한다.
여기서 whole number란 0과 자연수를 의미한다. 즉 음수의 값을 변환할 수 없다는 것이다! 이에 참고하여 0과 양의 정수에 대해서 변환할 때 사용하면 될 것 같다.
// optional 형태의 Int로 되어있다.
var wholeNumberValue: Int? { get }
실제로 사용해보자!
// 공식문서 예시
let chars: [Character] = ["4", "④", "万", "a"]
for ch in chars {
print(ch, "-->", ch.wholeNumberValue)
}
// Prints:
// 4 --> Optional(4)
// ④ --> Optional(4)
// 万 --> Optional(10000)
// a --> nil
엥???
그냥 숫자 뿐만 아니라 ④, 万 처럼 숫자의 의미를 가지는 문자 또한 숫자로 바꿔준다. (신기...)
우리가 잘 아는 친숙한 한자들도 잘 변환된다. ( 一, 二, 三 ...)
let chars: [Character] = ["一", "二", "三"]
for ch in chars {
print(ch.wholeNumberValue)
}
// Optional(1)
// Optional(2)
// Optional(3)
wholeNumberValue가 옵셔널 정수형이기 때문에 Optional로 값이 반환되는 것을 볼 수 있다. 실제 사용할 때는 옵셔널을 제거해주는 여러 방식을 사용해주면 된다!
근데 위처럼 한자나 특수문자를 변환하는 것 보다, 일반 정수가 문자(character)로 표현되었을 때 이를 정수형(Int)으로 변환하는 경우에 주로 사용할 수 있을 것 같다.
끝!
Ref: https://developer.apple.com/documentation/swift/character/3127025-wholenumbervalue