अद्यतन यह स्विफ्ट 3.1स्विफ्ट 3 में इस स्विच कथन में टाइप अनुमान क्यों काम नहीं कर रहा है?
में तय हो गई है एक switch
बयान करने के लिए एक if-else
माइग्रेट करते समय, मैंने देखा है कि प्रकार निष्कर्ष काम नहीं कर रहा था। मुझे में HKQuantityTypeIdentifier
निर्दिष्ट करने की आवश्यकता क्यों है जब quantityTypeIdentifier
पहले से ही उस प्रकार का है?
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' एक enum प्रकार नहीं है। यह एक संरचना है। शायद यही कारण है। – vadian
मैं स्विफ्ट पुस्तक में कुछ भी नहीं ढूंढ पा रहा हूं, लेकिन मुझे ऐसा लगता है कि अगर 'मात्रा मात्रा टाइप करेंइंडिफायर ==। डिस्टेंस वाल्किंग राउंडिंग {}' काम करता है, तो स्विच स्टेटमेंट इसे भी संभालने में सक्षम होना चाहिए। – jjatie
क्या ओब्जे-सी के साथ संगतता के लिए यह 'संरचना'' enum' नहीं है? – jjatie