भाषा साथ enums पर एक अगर-बाकी तुलना कैसे करना है: Swift2.3तर्क
उदाहरण के जाने के लिए मैं आप enums
enum Normal {
case one
case two, three
}
enum NormalRaw: Int {
case one
case two, three
}
enum NormalArg {
case one(Int)
case two, three
}
Switch
के विभिन्न प्रकार दिखाता हूँ पर इस्तेमाल किया जा सकता सभी तीन enums तो जैसे:
var normal: Normal = .one
var normalRaw: NormalRaw = .one
var normalArg: NormalArg = .one(1)
switch normal {
case .one: print("1")
default: break
}
switch normalRaw {
case .one: print(normalRaw.rawValue)
default: break
}
switch normalArg {
case .one(let value): print(value)
default: break
}
अगर-बाकी बयान हालांकि मैं केवल Normal
और ०१२३३०७०१३ के लिए तुलना कर सकते हैं पर, और एक त्रुटि संदेश NormalArg
के लिए पता चलता है, तो मैं कोड
द्विआधारी ऑपरेटर '==' प्रकार के ऑपरेंड के लिए लागू नहीं किया जा सकता
NormalArg
और_
कोड यह नहीं चल सकता उदाहरण:
if normal == .two { // no issue
.. do something
}
if normalRaw == .two { // no issue
.. do something
}
if normalArg == .two { // error here (the above message)
.. do something
}
if normalArg == .one(_) { // error here (the above message)
.. do something
}
if normalArg == .three { // error here (the above message)
.. do something
}
कोई विचार? मैं वास्तव में इस कोड के साथ कुछ भी नहीं कर रहा हूं, मैं बस सोच रहा हूं कि हम तुलना क्यों नहीं कर सकते हैं।
मुझे नहीं पता था कि मैं एक कथन पर 'केस' कीवर्ड जोड़ सकता हूं। –
ओह क्षमा करें, मैंने आपको गलत समझा होगा। मुद्दा यह है कि स्विफ्ट को यह नहीं पता कि डिफ़ॉल्ट रूप से आपके enum को कैसे समझाया जाए यदि यह मूल्यों से जुड़ा हुआ है (जो कच्चे मान में है)। यदि आपके enum में संबंधित मान नहीं हैं या यदि उसके पास कच्चे-मूल्य का प्रकार है, तो आपको मानक लाइब्रेरी (RawRepresentable प्रोटोकॉल I अनुमान से) द्वारा समीकरण प्राप्त होता है। आप निश्चित रूप से जानते हैं कि आप संबंधित मूल्यों को कच्चे प्रकार के साथ मिश्रित नहीं कर सकते हैं और यही कारण है कि आप अपने प्रोटोकॉल पर समेकित लागू किए बिना ".one (Int) == .two" की तुलना नहीं कर सकते। – xxtesaxx