iOS/Swift

Swift) NumberFomatter

Brad_Heo 2022. 12. 2. 22:04

Swift) NumberFomatter

NumberFormatter란?

애플 공식문서에서는 숫자 값과 해당 텍스트 표현 간에 변환하는 포맷터라고 소개하고 있습니다.

조금 더 살펴보는게 좋을 것 같네요.

OverView에서 이제 NumberFormatter의 인스턴스는 NSNumber 객체를 포함하는 셀의 텍스트 표현을 포맷하고 숫자 값의 텍스트 표현을 NSNumber 객체로 변환합니다.

-> 여기서 NSNumber란 기본 스칼라 숫자 값에 대한 객체 래퍼라고 되어 있는데 추후에 자세히 알아봐야 겠네요.

계속해서 NSNumber는 표현에는 정수, 실수 및 복식이 포함되고, float 및 double은 지정된 소수점 위치로 형식화할 수 있습니다. NumberFormatter 객체는 셀이 허용할 수 있는 숫자 값에 범위를 부과할 수도 있습니다.

간단하게 말해서 "소수점에 대해서 표현범위를 지정이 가능하고, 정수에 대해서는 일정한 형식을 줄 수 있다" 는 것 같네요.

예제 코드

NumberFormatter를 사용하기 위해선 Foundation 라이브러리를 선언 해줘야 합니다.
NumberFormatter는 NSObject와 연관되어 있기 떄문에 그런 것 같네요.

import Foundation

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal

let myNumber: Double = 100000

print(numberFormatter.string(for: myNumber))

// 출력 Optional("100,000") 기본적으로 옵셔널 값 이라서 바인딩 처리가 필요합니다.

NumberFormatter Style

numberStyle에는 3가지 옵션이 있는데

  • decimal
  • percentage
  • currency

위의 코드로 style만 변경하자면 출력이

  • decimal -> Optional("100,000")
  • percentage -> Optional("10,000,000%")
  • currency -> Optional("₩100,000")

위의 결과처럼 나옵니다.

상황에 따라서 style을 지정해주면 될 것 같습니다.

사용법

메소드를 통해서 사용해도 좋을 것 같고 extension을 통해 활용할 수 있을 것 같습니다.

  1. 메소드.
  2. func setNumberFormatter(myData: Double) -> String? { let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .percent return numberFormatter.string(for: myNumber) }
  3. extension
  4. extension String { var insertComma: String { let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .decimal return numberFormatter.string(for: Double(self)) ?? self } }