मैं अपने कस्टम अनुक्रम प्रकार बनाया है और मैं समारोह एक पैरामीटर के रूप अनुक्रम के किसी भी प्रकार को स्वीकार करना चाहते रूप में अनुक्रम के किसी भी प्रकार। (मैं इस पर दोनों सेट, और मेरे अनुक्रम प्रकार का उपयोग करना चाहते हैं)स्विफ्ट: एक समारोह पैरामीटर
कुछ इस तरह:
private func _addToCurrentTileset(tilesToAdd tiles: SequenceType)
वहाँ किसी भी तरह से मैं इसे कैसे कर सकते हैं?
यह अपेक्षाकृत सीधा लगता है, लेकिन मैं किसी भी तरह यह समझ नहीं कर सकते हैं। स्विफ्ट toolchain मुझसे कहता है: Protocol 'SequenceType' can only be used as a generic constraint because it has Self or associated type requirements
, और मैं एक प्रोटोकॉल है जो SequenceType और इसे से स्व आवश्यकता के अनुरूप होगा बनाने के लिए कैसे पता नहीं है। अब
protocol EnumerableTileSequence: SequenceType {
associatedtype GeneratorType = geoBingAnCore.Generator
associatedtype SubSequence: SequenceType = EnumerableTileSequence
}
अगर कहते हैं कि मैं सरणियों की तरह इस तरह के प्रोटोकॉल परिभाषा अन्य collectionType संस्थाओं के साथ पहले से ही आत्म आवश्यकता को समाप्त कर सकते, तो, सेट के अनुरूप नहीं होगा:
मैं साथ associatedType आवश्यकता नहीं, बल्कि स्वयं को समाप्त कर सकते यह।
संदर्भ: अपने कस्टम दृश्यों प्रगणक प्रकार के सभी उपवर्गों परिभाषित कर रहे हैं के रूप में:
public class Enumerator<T> {
public func nextObject() -> T? {
RequiresConcreteImplementation()
}
}
extension Enumerator {
public var allObjects: [T] {
return Array(self)
}
}
extension Enumerator: SequenceType {
public func generate() -> Generator<T> {
return Generator(enumerator: self)
}
}
public struct Generator<T>: GeneratorType {
let enumerator: Enumerator<T>
public mutating func next() -> T? {
return enumerator.nextObject()
}
}
बहुत बहुत धन्यवाद, मुझे वास्तव में अनुक्रम के अंदर तत्वों के प्रकार की परवाह है, क्या तत्वों के अंदर एक प्रकार को बाधित करने का कोई तरीका है? कुछ ऐसा: <टी: अनुक्रम प्रकार जहां टी। एलिमेंट: टाइलिड> – ambientlight
@ambientlight निश्चित रूप से, आप '<टी: अनुक्रम टाइप कर सकते हैं जहां टी। जेनरेटर। एलिमेंट: टाइलआईड>' यदि 'टाइलआईड 'प्रोटोकॉल है या' == टाइलआईडी 'अगर यह एक ठोस प्रकार है – Hamish