2016-11-11 5 views
1

스위프트에서 사용자 정의 유닛을 만들 때 하나의 심볼 만 정의 할 수 있습니다. 내장 된 단위로 짧은, 중간 및 긴 단위가있을 수 있습니다. 맞춤 단위의 다른 단위 스타일을 어떻게 설정합니까?스위프트 3에서 중간 및 긴 측정 심볼 설정

extension UnitEnergy { 
    static let footPounds = UnitEnergy(symbol: "ft-lbs", converter: UnitConverterLinear(coefficient: 1)) 
} 

var test = Measurement<UnitEnergy>(value: 10, unit: .footPounds) 
var formatter = MeasurementFormatter() 

formatter.locale = Locale(identifier: "es") 

formatter.unitStyle = .short 
print(formatter.string(from: test)) 

formatter.unitStyle = .medium 
print(formatter.string(from: test)) 

formatter.unitStyle = .long 
print(formatter.string(from: test)) 

formatter.unitOptions = .providedUnit 

formatter.unitStyle = .short 
print(formatter.string(from: test)) 

formatter.unitStyle = .medium 
print(formatter.string(from: test)) 

formatter.unitStyle = .long 
print(formatter.string(from: test)) 

출력 :

10 J 
10 J 
10 julios 
10 ft-lbs 
10 ft-lbs 
10 ft-lbs 
+0

[WWDC 2016 세션 238] (https://developer.apple.com/videos/play/wwdc2016/238/)에서 맞춤 단위로 서식 지정하는 방법에 대해 설명합니다. – rmaddy

+0

나는 그것을 보았으나이 문제는 다루지 않았다. – Andrew

답변

1

짧은 답변 - 당신은 할 수 없습니다. API는 세 가지 단위 스타일에 대해 다른 기호를 제공 할 수있는 기능을 제공하지 않습니다.

맞춤 단위의 경우 MeasurementFormatter에는 맞춤 단위를 정의 할 때 하나의 기호 만 사용됩니다.

세 가지 다른 단위 스타일에 대해 세 가지 가능한 기호 이외의 다른 기호가 필요하다는 점에 유의하십시오. 일부 유닛에는 공백이나 다른 구두점이있을 수 있기 때문에 실제로는 세 가지 다른 문자열 형식이 필요합니다. 일부는 그렇지 않을 수도 있습니다. 일부는 값 앞에 나타날 수 있으며 일부는 값 뒤에 나타날 수 있습니다.

그리고 나서 장치를 현지화하는 문제가 있습니다. Foundation 프레임 워크는 지원되는 모든 언어에 대해이 모든 정보를 제공하므로 사전 정의 된 모든 단위에 대해 지원되는 모든 언어에 대해 세 가지 단위 스타일을 모두 표시 할 수 있습니다.

API는 맞춤 단위를 지원하지만 단위 스타일 특정 기호를 제공 할 수는 없으므로 Apple에서 개선 요청을 제출하는 것이 좋습니다.