2017-02-01 7 views
19

मैं [petInfo : UIImage]() के शब्दकोश का एक शब्दकोश बनाने की कोशिश कर रहा हूं लेकिन मुझे त्रुटि Type 'petInfo' does not conform to protocol 'Hashable' मिल रही है। मेरे petInfo struct यह है:संरचना हैशबल बनाओ?

struct petInfo { 
    var petName: String 
    var dbName: String 
} 

तो मैं किसी भी तरह यह hashable बनाना चाहते लेकिन उसके घटकों में से कोई भी एक पूर्णांक है जो var hashValue: Int की आवश्यकता है। यदि प्रोटोकॉल में से कोई भी पूर्णांक नहीं है तो मैं इसे प्रोटोकॉल के अनुरूप कैसे बना सकता हूं? क्या मैं dbName का उपयोग कर सकता हूं यदि मुझे पता है कि यह इस संरचना की सभी घटनाओं के लिए अद्वितीय होगा?

उत्तर

29

बस अपने hashValue फ़ंक्शन से dbName.hashValue वापस करें। एफवाईआई - हैश मूल्य को अद्वितीय होने की आवश्यकता नहीं है। आवश्यकता यह है कि बराबर समतुल्य दो वस्तुएं भी एक ही हैश मान होनी चाहिए।

struct PetInfo: Hashable { 
    var petName: String 
    var dbName: String 

    var hashValue: Int { 
     return dbName.hashValue 
    } 

    static func == (lhs: PetInfo, rhs: PetInfo) -> Bool { 
     return lhs.dbName == rhs.dbName && lhs.petName == rhs.petName 
    } 
} 
+0

ओह जानना अच्छा है! क्या आप कृपया 'स्थिर func' चीज को समझाते हुए समझते हैं? – MarksCode

+0

हैशबल समेकित विस्तारित करता है। '==' फ़ंक्शन के पूर्ण स्पष्टीकरण के लिए दो प्रोटोकॉल के लिए प्रलेखन देखें। – rmaddy

संबंधित मुद्दे