আমি একটি প্ল্যাটফর্ম থেকে ন্যায্য পরিমাণ কোড পোর্ট করি যা সুইফটে অ্যাবস্ট্রাক্ট বেস ক্লাসগুলিকে সমর্থন করে এবং এটিতে প্রচুর পরিমাণে চালিত হয়। আপনি যদি সত্যিই যা চান তা একটি বিমূর্ত বেস শ্রেণীর কার্যকারিতা, তবে এর অর্থ এই শ্রেণিটি উভয়কেই ভাগ করে নেওয়া ভিত্তিক শ্রেণীর কার্যকারিতা বাস্তবায়নের কাজ করে (অন্যথায় এটি কেবল একটি ইন্টারফেস / প্রোটোকল হবে) এবং এটি এমন পদ্ধতিগুলি সংজ্ঞায়িত করে যা দ্বারা প্রয়োগ করা আবশ্যক উত্পন্ন ক্লাস
সুইফটে এটি করার জন্য আপনার একটি প্রোটোকল এবং একটি বেস ক্লাস প্রয়োজন।
protocol Thing
{
func sharedFunction()
func abstractFunction()
}
class BaseThing
{
func sharedFunction()
{
println("All classes share this implementation")
}
}
নোট করুন যে বেস ক্লাসটি ভাগ করা পদ্ধতি (গুলি) প্রয়োগ করে তবে প্রোটোকলটি কার্যকর করে না (যেহেতু এটি সমস্ত পদ্ধতি প্রয়োগ করে না)।
তারপরে উত্পন্ন শ্রেণিতে:
class DerivedThing : BaseThing, Thing
{
func abstractFunction()
{
println("Derived classes implement this");
}
}
উত্পন্ন শ্রেণিটি প্রোটোকলের সেই অংশটি সন্তুষ্ট করতে সহায়তা করে, বেস শ্রেণি থেকে ভাগ করে ফাংশন উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং প্রোটোকলটি এখনও বিমূর্ত ফাংশন বাস্তবায়নের জন্য উদ্ভূত শ্রেণীর প্রয়োজন।
এই পদ্ধতির একমাত্র আসল ক্ষতি হ'ল যেহেতু বেস ক্লাসটি প্রোটোকলটি বাস্তবায়ন করে না, আপনার যদি একটি বেস ক্লাস পদ্ধতি থাকে যাতে প্রোটোকল সম্পত্তি / পদ্ধতিতে অ্যাক্সেসের প্রয়োজন হয় তবে আপনাকে সেই উত্স থেকে প্রাপ্ত ক্লাসে ওভাররাইড করতে হবে, এবং সেখান থেকে কল করুন বেস ক্লাসটি (সুপারের মাধ্যমে) পাশ করা হয় self
যাতে বেস ক্লাসটির প্রোটোকলের একটি উদাহরণ থাকে যার সাহায্যে এটি কাজ করতে পারে।
উদাহরণস্বরূপ, ধরুন যে ভাগ করা ফাংশনটি অ্যাবস্ট্র্যাক্ট ফাংশন কল করার জন্য প্রয়োজন। প্রোটোকলটি একই থাকবে, এবং ক্লাসগুলি এখন এর মতো দেখাবে:
class BaseThing
{
func sharedFunction(thing: Thing)
{
println("All classes share this implementation")
thing.abstractFunction()
}
}
class DerivedThing : BaseThing, Thing
{
func sharedFunction()
{
super.sharedFunction(self)
}
func abstractFunction()
{
println("Derived classes implement this");
}
}
এখন উত্পন্ন শ্রেণীর ভাগ করা ফাংশন প্রোটোকলের সেই অংশটি সন্তুষ্ট করছে, তবে উত্পন্ন শ্রেণিটি এখনও বেস শ্রেণীর যুক্তি যুক্তিসঙ্গত সোজা উপায়ে ভাগ করতে সক্ষম।