[Swift] wholeNumberValue 란?
👨🏻‍💻iOS 공부/iOS & Swift

[Swift] wholeNumberValue 란?

728x90
반응형

문자열를 정수형으로? ( 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"이다. 

공식 문서의 정의 부분을 먼저 살펴보자. 

 

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

 

Apple Developer Documentation

 

developer.apple.com

 

728x90
반응형