2014-06-10 13 views
14

में उद्देश्य-सी टाइपपीफ एनम पर समानता मैं स्विफ्ट में फेसबुक ऑब्जेक्टिव-सी एसडीके के साथ काम कर रहा हूं और मैं एनबीएम से मूल्य के साथ एक एफबीएसशनस्टेट मान की तुलना करने की कोशिश कर रहा हूं।स्विफ्ट

Could not find an overload for '==' that accepts the supplied arguments

मैं अनिवार्य रूप से पूरा करने के लिए कोशिश कर रहा हूँ: हालांकि मैं संकलक त्रुटि मिलती है

if state == FBSessionStateOpen { ... } 

मैं मूल्य के खिलाफ की तुलना द्वारा इस के आसपास काम करने में सक्षम हूँ ...

if state.value == FBSessionStateOpen.value { ... } 

लेकिन मुझे आश्चर्य है कि इस काम को स्विफ्ट एनम की तरह बनाने का कोई तरीका है?

+0

'का प्रयास करें यदि राज्य == .FBSessionStateOpen' – Adam

+2

कोई भाग्य, स्विफ्ट डॉक्स के अनुसार इस काम किया जाना चाहिए था लेकिन ऐसा लगता है enum को NS_ENUM मैक्रो के साथ नहीं बनाया गया था। त्रुटि यह है: सदस्य 'FBSessionStateOpen' – DennyFerra

उत्तर

9

आप enum और '.Value' के साथ स्थिरांक खोलने अंतर्निहित पूर्णांक है, जो स्विच होना चाहिए प्राप्त करने के लिए कर सकते हैं:

switch x.value { 
    case Foo.value: 
} 

हो सकता है कि यह भविष्य के रिलीज में एक बग और सेब ठीक बात है।

-1

स्विफ्ट स्वचालित रूप से enumName.caseName संरचना की अपनी शैली में Obj-C enums को मानचित्र करता है। उदाहरण के लिए, यदि enum का नाम FBSessionState है और FBSessionStateOpen केस है, तो यह स्विफ्ट में FBSessionState.Open के रूप में मानचित्र करेगा।

== ऑपरेटर स्विफ्ट एनम्स की तुलना करने के लिए काम करेगा।

+1

नहीं ढूंढ सका यह FBSessionState के लिए प्रतीत नहीं होता है। FBSessionState.Open या यहां तक ​​कि FBSessionState.FBSessionStateOpen का उपयोग "अपेक्षित सदस्य का नाम या टाइपर नाम के बाद कन्स्ट्रक्टर कॉल" का कारण बनता है - मुझे लगता है कि enum मैपिंग केवल तब होती है जब एनएमएस को NS_ENUM मैक्रो के साथ परिभाषित किया जाता है जैसा कि दस्तावेज़ https://developer.apple में बताया गया है। कॉम/लाइब्रेरी/प्रीरलीज/आईओएस/प्रलेखन/स्विफ्ट/वैचारिक/बिल्डिंगोकैप्स/इंटरैक्टिंगविथ कैपआईएस.html // // apple_ref/डॉक्टर/यूआईडी/टीपी 40014216-सीएच 8-एक्सआईडी_15 – DennyFerra

+0

@ डेनीफेरा आह आप शायद इसके बारे में सही हैं। चूंकि अधिकांश ओब्जे-सी enums केवल पूर्णांक मान हैं, इसे स्विफ्ट में इसे फिर से बनाना बहुत आसान होना चाहिए और इसके बजाय इसका उपयोग करना चाहिए। – Erik

4

बीटा 4 अपडेट के साथ, .value वर्कअराउंड अब काम नहीं करता है। फेसबुक के एसडीके को बदले बिना एक और आसान कामकाज प्रतीत नहीं होता है।

मैंने NS_ENUM मैक्रो का उपयोग करने के लिए सभी फेसबुक enums बदल दिए, ताकि आप स्विफ्ट वाक्यविन्यास enums का उपयोग कर सकें।

if FBSession.activeSession().state == .CreatedTokenLoaded 

इन परिवर्तनों pgaspar's Facebook fork में मिला दिया गया है, जो स्विफ्ट संगतता के लिए अन्य सुधार शामिल हैं।

pod 'Facebook-iOS-SDK', :git => 'https://github.com/pgaspar/facebook-ios-sdk.git' 
+1

फेसबुक के अभी तक * इसे ठीक करने के लिए क्यों कोई संकेत है? फेसबुक के आगे परिवर्तन करने के रूप में पागास्पर के कांटे के खतरे चल रहे हैं .. –

2

निकोलाई Nagorny के जवाब देने के लिए जोड़ा जा रहा है, यह क्या मेरे लिए काम किया है:

if (device.deviceType.value == TYPE_BLUETOOTHNA.value)