UPDATE這是固定在斯威夫特3.1爲什麼類型推斷在Swift 3的這個switch語句中不起作用?
在遷移的if-else
到switch
聲明,我注意到,類型推理是行不通的。爲什麼當quantityTypeIdentifier
已經屬於那種類型時,我需要在每個case
中指定HKQuantityTypeIdentifier
?
func process(samples: [HKSample]?, quantityTypeIdentifier: HKQuantityTypeIdentifier) {
DispatchQueue.main.async { [weak self] in
if let quantitySamples = samples as? [HKQuantitySample] {
for sample in quantitySamples {
switch quantityTypeIdentifier {
case HKQuantityTypeIdentifier.distanceWalkingRunning:
// code
case HKQuantityTypeIdentifier.activeEnergyBurned:
// code
case HKQuantityTypeIdentifier.heartRate:
// code
default:
fatalError("Quantity Type Identifier not implemented \(quantityTypeIdentifier)")
}
}
}
}
}
我能夠調用的函數,如:
process(samples: samples, quantityTypeIdentifier: .distanceWalkingRunning)
'HKQuantityTypeIdentifier'不是一個枚舉類型。這是一個結構。這可能是原因。 – vadian
我一直無法在Swift書中找到任何東西,但在我看來,如果'如果quantityTypeIdentifier == .distanceWalkingRunning {}'起作用,那麼switch語句也應該能夠處理它。 – jjatie
這個'struct'是不是與Obj-C兼容的'enum'? – jjatie