2015-09-04 4 views
6

मैं एक 3 पार्टी ढांचे का उपयोग कर रहा करने के लिए लागू नहीं किया जा सकता है, वहाँ एक फ़ाइल में निम्न कोड शामिल है:द्विआधारी ऑपरेटर '==' दो struct ऑपरेंड

struct AdServiceType { 
    init(_ value: UInt) 
    var value: UInt 
} 
var Internal: AdServiceType { get } 
var Normal: AdServiceType { get } 
var External: AdServiceType { get } 

class AdService : NSObject { 
    var serviceType: AdServiceType 
    init!() 
} 

फिर, मेरे अपने परियोजना कक्षा में, मेरे पास है

var aService : AdService? 

//aService is initialised 

//COMPILER ERROR: Binary operator ’==’ cannot be applied to two AdServiceType operands 
if aService!.serviceType == Normal { 
    //DO SOMETHING    
} 

मैं संकलक ऊपर जब मैं जाँच अगर serviceTypeNormal है उल्लेख किया त्रुटि मिली। क्यूं कर? मैं इससे छुटकारा कैसे पाऊं?

+0

के रूप में एक 'बजाय enum' लागू किया जाना चाहिए है। अब, आप या तो 'serviceType.value' की तुलना कर सकते हैं या' Equatable' प्रोटोकॉल के अनुरूप हो सकते हैं और 'Ad=erviceType' – Alladinian

+1

@ iosDev82 पर' == 'का उपयोग करने के लिए कस्टम तुलना तर्क प्रदान कर सकते हैं I इस बारे में संदेह था लेकिन हाँ मुझे लगता है कि यह बनाता है सब के बाद समझ में, तो मैंने इसे चिह्नित किया है। Thanx – Alladinian

उत्तर

0

मैं पता लगा है कि सरल समाधान struct की संपत्ति के मूल्य की तुलना करना है:

if aService!.serviceType.value == Normal.value { 
    //DO SOMETHING. 
} 
0

मैं तेजी से नहीं जानता लेकिन जहां तक ​​मैं आपका struct को समझ सकता हूँ सेवा प्रकार किस प्रकार AdService> मुझे लगता है कि यू एक उदाहरण देने के लिए के रूप में है कि आपरेशन बनाने के लिए struct के अंदर चर प्राप्त करने की आवश्यकता का एक उद्देश्य है

myStruct{ 
int x 
int y 
} 

अब हालत के लिए

myStruct obj1; 
obj1.x = 50; 
obj2.y = 40; 

if(obj.x == obj.y) कुछ इस तरह मान्य होगा। आपको स्ट्रक्चर के अंदर मूल्य का उपयोग करना होगा, न कि स्ट्रक्चर। या बल्कि काफी values of struct == values of some other struct

-2

प्रतिनिधित्व होगा मैं अपने Thirdparty ढांचे के बारे में ज्ञान का एक बहुत कुछ नहीं है (struct.x == struct2.x && struct.y == struct2.y) के लिए एक && ऑपरेटर आवंटित। लेकिन मुझे पता है कि कुछ प्रकार '==' लेकिन .equals का उपयोग नहीं करते हैं। उदाहरण के लिए:

if aService!.serviceType.equals(Normal) 

शायद ऐसा करना चाहिए।

6

AdServiceType struct Equatable नहीं है और एक स्विच अभिव्यक्ति के रूप में इस्तेमाल नहीं किया जा सकता है। लेकिन इसकी value कर सकते हैं। प्रयास करें:

switch aService!.serviceType.value { 
case Internal.value: 
    //do something 
case Normal.value: 
    //do something 
case External.value: 
    //do something 
default: 
    ... 
} 

वैकल्पिक रूप से, आप Equatable प्रोटोकॉल के लिए AdServiceType जोड़ने समर्थन कर सकते हैं:

extension AdServiceType : Equatable {} 
public func ==(lhs: AdServiceType, rhs: AdServiceType) -> Bool 
{ 
    return lhs.value == rhs.value 
} 

और स्विच वैसा ही छोड़ दें।

+0

मैंने मूल्य का उपयोग किया, और त्रुटि प्राप्त हुई: बाइनरी ऑपरेटर '~ =' को 'AdServiceType' और 'UInt' – user842225

+0

पर लागू नहीं किया जा सकता था क्या आपने हर जगह मूल्य का उपयोग किया था? स्विच लाइन पर और सभी केस लाइनों पर? –

+1

ओह, मैं केवल स्विच लाइन में उपयोग किया जाता है। धन्यवाद! यह ठीक है अब! – user842225

-2

बस इसे कक्षा में बदलें और nsobject और दर्द से अधिक हो।

class MyClass: NSObject { 

    //Write code in here 
} 
+0

पूरी तरह असहमत है, तेजी से शक्तियों में से एक है structs के साथ मूल्य प्रकार है, आपको 'स्विफ्ट में मूल्य प्रकार के साथ बेहतर ऐप्स बनाना' देखना चाहिए (https://developer.apple.com/videos/play/wwdc2015-414/) – marchinram

+0

अगर मैं आसानी से == का उपयोग करने में सक्षम नहीं हूं, तो बहुत अधिक बिंदु नहीं है। आप अन्य सभी NSObject उपयोगिता कार्यों से भी चूक जाते हैं। – Esqarrouth

+0

यदि आप स्विफ्ट का उपयोग करने जा रहे हैं, तो आप जब भी कर सकते हैं तो आप idiomatic कोड लिख सकते हैं .. – Jadar

0

मैं struct Equatable बनाकर इसे ठीक होगा:

extension AdServiceType: Equatable {} 

func ==(lhs: AdServiceType, rhs: AdServiceType) -> Bool { 
    return lhs.value == rhs.value; 
} 
संबंधित मुद्दे