관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] Measurement, MeasurementFormatter 개념 (#단위 변환, cm, m) 본문

iOS 응용 (swift)

[iOS - swift] Measurement, MeasurementFormatter 개념 (#단위 변환, cm, m)

jake-kim 2023. 10. 5. 01:01

Measurement 개념

  • 1, 2, 3과 같은 숫자에 cm, m 같은 문자열도 같이 붙여서 관리해주는 struct 형태의 Unit

https://developer.apple.com/documentation/foundation/measurement

ex) 1이라는 meter 단위의 숫자가 있을 때, 이것을 cm 단위로 바꾼 후, 뒤에 "cm"를 붙여서 "100 cm"로 만들고 싶은 경우?

  • 보통은 Int, Double Extension으로 계산식을 넣어서 사용하지만 Measurement를 사용하면 이것들을 모두 지원해주기 때문에 단위 변환이나 "cm"와 같은 이름을 붙이기가 유용

MeasurementFormatter 개념

  • Measurement로 인스턴스를 만든 후 이 값에 특정 "cm"와 같은 이름을 붙여서 하나의 문자열로 만들 수 있는 포멧터

https://developer.apple.com/documentation/foundation/measurementformatter

Measurement로 5 숫자를 500cm로 변환하기

  • meter를 나타내는 Measurement 인스턴스를 생성 & cm단위로 변환
let lengthInMeters = Measurement(value: 5, unit: UnitLength.meters)
let lengthInCentimeters = lengthInMeters.converted(to: .centimeters)
  • MeasurementFormatter를 사용하여 길이를 문자열로 포멧팅
let formatter = MeasurementFormatter()
formatter.unitOptions = .providedUnit
formatter.numberFormatter.maximumFractionDigits = 2
  • formatter 메소드인 string(from:)을 사용하여 "cm"달아주기
@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *)
extension MeasurementFormatter {

    public func string<UnitType>(from measurement: Measurement<UnitType>) -> String where UnitType : Unit
}

적용 완료)

let formattedLength = formatter.string(from: lengthInCentimeters)
print("길이: " + formattedLength) // 길이: 500 cm

* 전체 코드: https://github.com/JK0369/ExMeasurementFormatter

 

* 참고

https://developer.apple.com/documentation/foundation/measurementformatter

https://developer.apple.com/documentation/foundation/measurement

Comments