Skip to content

Commit 443bb59

Browse files
committed
Add a workaround for MeasurementFormatter so it can use Measurement
Due to current language limitations (26607639), MeasurementFormatter's stringFromMeasurement: is esentially useless when imported into Swift. This workaround allows it to work as expected. <rdar://problem/27173952> Workaround: MeasurementFormatter.string(from: Measurement<Unit>) doesn't recognize subclasses of Unit
1 parent c5a0860 commit 443bb59

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

stdlib/public/SDK/Foundation/Measurement.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,3 +296,15 @@ extension Measurement : _ObjectiveCBridgeable {
296296
return Measurement(value: source!.doubleValue, unit: u)
297297
}
298298
}
299+
300+
// This workaround is required for the time being, because Swift doesn't support covariance for Measurement (26607639)
301+
@available(OSX 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *)
302+
extension MeasurementFormatter {
303+
public func string<UnitType: Unit>(from measurement: Measurement<UnitType>) -> String {
304+
if let result = string(for: measurement) {
305+
return result
306+
} else {
307+
return ""
308+
}
309+
}
310+
}

test/1_stdlib/TestMeasurement.swift

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,18 +117,25 @@ class TestMeasurement : TestMeasurementSuper {
117117
expectEqual(MyDimensionalUnit.unitA, MyDimensionalUnit.unitA)
118118
expectTrue(MyDimensionalUnit.unitA == MyDimensionalUnit.unitA)
119119
}
120+
121+
func testMeasurementFormatter() {
122+
let formatter = MeasurementFormatter()
123+
let measurement = Measurement(value: 100, unit: UnitLength.kilometers)
124+
let result = formatter.string(from: measurement)
125+
126+
// Just make sure we get a result at all here
127+
expectFalse(result.isEmpty)
128+
}
120129
}
121130

122131
#if !FOUNDATION_XCTEST
123132
if #available(OSX 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) {
124-
// Temporarily disabled (26345468)
125-
/*
126133
var MeasurementTests = TestSuite("TestMeasurement")
127134
MeasurementTests.test("testBasicConstruction") { TestMeasurement().testBasicConstruction() }
128135
MeasurementTests.test("testConversion") { TestMeasurement().testConversion() }
129136
MeasurementTests.test("testOperators") { TestMeasurement().testOperators() }
130137
MeasurementTests.test("testUnits") { TestMeasurement().testUnits() }
138+
MeasurementTests.test("testMeasurementFormatter") { TestMeasurement().testMeasurementFormatter() }
131139
runAllTests()
132-
*/
133140
}
134141
#endif

0 commit comments

Comments
 (0)