में Set.addSequence को कार्यान्वित करना मैंने स्विफ्ट में एक सेट लागू किया है जो शब्दकोश कुंजी का उपयोग करता है। मैं एक addAll (अनुक्रम) विधि को कार्यान्वित करना चाहता हूं जो सेट में तत्वों पर कोई अनुक्रम प्रकार लेता है, लेकिन मुझे एक त्रुटि मिल रही है जो समझ में नहीं आता है। यहां मेरा कोडस्विफ्ट
struct Set<Element: Hashable> {
var hash = [Element: Bool]()
init(elements: [Element] = []) {
for element in elements {
self.hash[element] = true
}
}
var array: [Element] {
return hash.keys.array
}
func contains(element: Element) -> Bool {
return hash[element] ?? false
}
mutating func add(element: Element) {
hash[element] = true
}
mutating func add(array: [Element]) {
for element in array {
hash[element] = true
}
}
mutating func add<S : SequenceType where S.Generator.Element == Element>(sequence: S) {
for element in sequence { // Error here: "Cannot convert the expression's type 'S' to type 'S'
hash[element] = true
}
}
mutating func remove(element: Element) {
hash[element] = nil
}
}
मुझे यह त्रुटि XCode 6.1 और 6.0.1 में मिल रही है।
मैं ऐरे की विस्तार विधि के अर्थशास्त्र का पालन करना चाहता था, लेकिन उस प्रकार का हस्ताक्षर मेरे लिए भी संकलित नहीं होता है।
क्या मैं कुछ गलत कर रहा हूं, या क्या मुझे रडार दर्ज करना चाहिए?
संपादित: सिर्फ https://github.com/robrix/Set/blob/master/Set/Set.swift पाया, इसलिए ऐसा करना है जो:
public mutating func extend<S : SequenceType where S.Generator.Element == Element>(sequence: S) {
// Note that this should just be for each in sequence; this is working around a compiler crasher.
for each in [Element](sequence) {
insert(each)
}
}
हालांकि, कि सिर्फ sequence
एक Array
है, जो एक तरह से पूरी तरह SequenceType
के प्रयोजन के धरा में बदल देता है।
मैं मानता हूं कि यह एक बग है। क्या किसी ने इसकी रिपोर्ट की? धन्यवाद – drasto
@drasto: मुझे नहीं पता। लेकिन किसी भी मामले में, यदि आप इस समस्या से प्रभावित हैं, तो अपनी खुद की बग रिपोर्ट जमा करें। –
'मानचित्र' का उपयोग करना सबसे अच्छा कामकाज जैसा लगता है। मुझे लगता है कि मुख्य समस्या यह है कि 'मानचित्र' वास्तव में दुष्प्रभावों की अनुमति नहीं देनी चाहिए। – bart