মনে করুন মুহুর্তের জন্য আমরা আপনার প্রোটোকলটি এমন একটি রুটিন যুক্ত করতে যুক্ত করি যা সম্পর্কিত ধরণের ব্যবহার করে:
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
। এটি যুক্তিসঙ্গত বলে মনে হয় এবং এটি হয় তবে এটি প্রকাশ করার জন্য আপনার কিছু উপায় প্রয়োজন need
এটি করার একটি উপায় হ'ল একটি শ্রেণি তৈরি করা (বা স্ট্রাক্ট, বা এনাম) যা বিমূর্ত মডেল টাইপের নামের সাথে একটি আসল প্রকারকে যুক্ত করে:
class LegoRequestType: RequestType {
typealias Model = LegoModel
}
এখন এটির অ্যারে ঘোষণা করা পুরোপুরি যুক্তিসঙ্গত LegoRequestType
কারণ আমরা যদি frobulate
তাদের সকলের কাছে চাইতাম তবে আমরা জানতাম যে আমাদের LegoModel
প্রত্যেকবার পাস করতে হবে ।
অ্যাসোসিয়েটেড টাইপের সাথে এই উপকারগুলি যে কোনও প্রোটোকল তৈরি করে যা সেগুলি বিশেষ ব্যবহার করে। সুইফ্ট স্ট্যান্ডার্ড লাইব্রেরিতে এর মধ্যে প্রোটোকল রয়েছে উল্লেখযোগ্য Collection
বা Sequence
।
আপনি যে জিনিস বাস্তবায়ন একটি অ্যারের তৈরি করতে অনুমতি দিতে Collection
প্রোটোকল বা বিষয় আছে যা ক্রম প্রটোকল বাস্তবায়ন একটি সেট, স্ট্যান্ডার্ড লাইব্রেরী একটি কৌশল struct হয় ধরনের তৈরি করতে "টাইপ-ইরেজিওর" বলা নিয়োগ AnyCollection<T>
বা AnySequence<T>
। টাইপ-ইরেজ টেকনিকটি স্ট্যাক ওভারফ্লো উত্তরে ব্যাখ্যা করার চেয়ে জটিল তবে আপনি যদি ওয়েবটি অনুসন্ধান করেন তবে এটি সম্পর্কে প্রচুর নিবন্ধ রয়েছে।
আমি ইউটিউবে প্রোটোকল উইথ অ্যাসোসিয়েটেড টাইপস (প্যাটস) এ অ্যালেক্স গ্যালাগারের একটি ভিডিওর প্রস্তাব দিতে পারি ।