में ऐरे का सेट बनाएं I सरणी से तत्वों को अद्वितीय बनाने के लिए सेट करने का प्रयास कर रहा था। मैंने सोचा कि यह काम शुरू करने के लिए सेट प्रारंभकर्ता का उपयोग करने के लिए एक शानदार दृष्टिकोण होगा। इसलिए मैंने सरणी बनाया और उस सरणी का उपयोग करके अपने नए को प्रारंभ करने का प्रयास किया। लेकिन संकलक शिकायत कर रहा था। मैंने इंटीजर मूल्यों का उपयोग करके इसे आजमाया और यह एक आकर्षण की तरह काम करता है। लेकिन मेरी अपनी कक्षा के साथ यह काम नहीं करता है। मैंने यह भी सोचा कि Equatable Protocol
जाने का सही तरीका है .. लेकिन जैसा कि आप देखते हैं, यह मेरी समस्या का समाधान नहीं करता है।स्विफ्ट
निम्नलिखित खेल का मैदान पर विचार करें:
import UIKit
internal struct Object: Equatable {
var a: Int
}
internal func == (lhs:Object,rhs: Object) -> Bool {
return lhs.a == rhs.a
}
let array = [Object(a:1),Object(a:1),Object(a:1),Object(a:1),Object(a:2)]
let set = Set(array) // ERROR
संकलक के साथ शिकायत कर रहा है
आह्वान नहीं कर सकते प्रारंभकर्ता सेट < _> प्रकार के तर्क [वस्तु]
कौन सा प्रोटोकॉल के साथ क्या चीजों को काम करने के लिए मुझे लागू करने की ज़रूरत है?
' 'Object' Hashable' के अनुरूप होना चाहिए,:
अपने कोड का समायोजन। –
संभावित डुप्लिकेट [स्विफ्ट में सेट करने के लिए सरणी को कम करें] (http://stackoverflow.com/questions/34161786/reduce-array-to-set-in-swift) – EmilioPelaez
यह डुप्लिकेट नहीं है, मैं स्पष्ट रूप से पूछ रहा हूं प्रोटोकॉल की तरह मुझे लागू करने की जरूरत है। संदर्भित थ्रेड हैशबल प्रोटोकॉल के बारे में कुछ भी नहीं कहता है और इसमें कमी का उपयोग करके संरचनाएं होती हैं जो डेवलपर को गलत समाधान के लिए प्रेरित कर सकती हैं। यह पोस्ट अधिक सटीक है और इसे किसी अन्य स्टैक ओवरफ़्लो उपयोगकर्ताओं को उनकी समस्या के लिए समाधान ढूंढने में सहायता करने के लिए डुप्लिकेट के रूप में चिह्नित नहीं किया जाना चाहिए। –