उस समय के लिए मान लीजिए कि हम आपके प्रोटोकॉल को संबद्ध प्रकार का उपयोग करने वाली दिनचर्या को जोड़ने के लिए समायोजित करते हैं:
public protocol RequestType: class {
associatedtype Model
var path: String { get set }
func frobulateModel(aModel: Model)
}
और स्विफ्ट आप RequestType
जिस तरह से आप चाहते हैं की एक सरणी बनाने के लिए थे। मैं फ़ंक्शन में उन अनुरोध प्रकारों की एक सरणी पास कर सकता हूं:
func handleQueueOfRequests(queue: [RequestType]) {
for request in queue {
request.frobulateModel()
}
}
मैं इस बात के लिए नीचे आता हूं कि मैं सभी चीजों को फिर से बनाना चाहता हूं, लेकिन मुझे यह जानना होगा कि कॉल में किस प्रकार का तर्क पारित करना है। मेरी कुछ RequestType
संस्थाएँ एक ले सकती हैं LegoModel
, कुछ PlasticModel
और ले सकती हैं , और कुछ और ले सकती हैं PeanutButterAndPeepsModel
। स्विफ्ट अस्पष्टता से खुश नहीं है इसलिए यह आपको एक प्रोटोकॉल का एक वैरिएबल घोषित नहीं करने देगा जिसमें एक संबद्ध प्रकार है।
एक ही समय में, यह सही समझ में आता है, उदाहरण के लिए, RequestType
जब हम जानते हैं कि उनमें से सभी का उपयोग करने का एक सरणी बनाएँ LegoModel
। यह उचित लगता है, और यह है, लेकिन आपको इसे व्यक्त करने के लिए किसी तरह की आवश्यकता है।
ऐसा करने का एक तरीका एक वर्ग (या संरचना, या एनम) बनाना है जो एक वास्तविक प्रकार को अमूर्त मॉडल प्रकार के नाम से जोड़ता है:
class LegoRequestType: RequestType {
typealias Model = LegoModel
}
अब यह पूरी तरह से उचित है LegoRequestType
कि हम एक सरणी की घोषणा करें क्योंकि यदि हम frobulate
उन सभी को चाहते हैं तो हमें पता है कि हमें LegoModel
प्रत्येक समय में पास करना होगा ।
एसोसिएटेड प्रकारों के साथ यह बारीकियों में कोई भी प्रोटोकॉल है जो उन्हें विशेष उपयोग करता है। स्विफ्ट स्टैण्डर्ड लाइब्रेरी में इस तरह के विशेष रूप से प्रोटोकॉल हैं Collection
या Sequence
।
आपको Collection
प्रोटोकॉल को लागू करने वाली चीजों की एक सरणी बनाने या अनुक्रम प्रोटोकॉल को लागू करने वाली चीजों का एक सेट बनाने की अनुमति देने के लिए , मानक लाइब्रेरी संरचना प्रकार बनाने के लिए "टाइप-इरेज़र" नामक एक तकनीक को नियुक्त करती है AnyCollection<T>
या AnySequence<T>
। स्टैक ओवरफ्लो उत्तर में समझाने के लिए टाइप-इरेज़र तकनीक जटिल है, लेकिन अगर आप वेब पर खोजते हैं तो इसके बारे में बहुत सारे लेख हैं।
मैं YouTube पर Alex Gallagher से प्रोटोकॉल के साथ एसोसिएटेड टाइप्स (PATs) पर एक वीडियो की सिफारिश कर सकता हूं ।