چندریختی (Swift Polymorphism)
«چندریختی (Polymorphism)» یعنی یک اسم، رفتارهای متفاوت داشته باشد. بنابراین، انواعِ مرتبط را یکسان می بینیم و نتیجه درست اجرا می شود. این کار با ارث بری یا پروتکل ها ممکن می شود.
چندریختی سوئیفت با ارث بری
در ارث بری، متد والد بازنویسی می شود. سپس، هنگام صدا زدن، نسخه درست اجرا می شود. مثل معلم های متفاوت با یک عنوان مشترک.
class Animal {
func speak() {
print("...");
}
}
class Dog: Animal {
override func speak() {
print("Woof");
}
}
class Cat: Animal {
override func speak() {
print("Meow");
}
}
let animals: [Animal] = [Dog(), Cat()];
animals.forEach { animal in
animal.speak();
};
نکته: این رفتار با «ارسال پویا (Dynamic Dispatch)» انتخاب می شود. یعنی، نسخه درست در زمان اجرا تشخیص داده می شود.
چندریختی سوئیفت با پروتکل
وقتی انواع بی ربط داری، از «پروتکل (Protocol)» استفاده کن. فقط امضا مهم است؛ ساختار مهم نیست.
protocol Speaker {
func speak();
}
struct Dog: Speaker {
func speak() {
print("Woof");
}
}
struct Cat: Speaker {
func speak() {
print("Meow");
}
}
let speakers: [Speaker] = [Dog(), Cat()];
speakers.forEach { s in
s.speak();
};
تمرین سه مرحله ای
- یک پروتکل
Drawableباdraw()بساز. - دو نوع مختلف را پیاده سازی کن.
- یک آرایه
[Drawable]بساز و همه را رسم کن.
لینک های داخلی مفید
ارث بری سوئیفت را برای پایه ها بخوان. سپس، برای قراردادهای مشترک، صفحه پروتکل ها را ببین. همچنین به چندریختی سوئیفت برگرد برای مرور.
جمع بندی سریع
- چندریختی یعنی یک نام، رفتارهای گوناگون.
- با ارث بری، نسخه فرزند اجرا می شود.
- با پروتکل، انواع بی ربط هم رفتار می شوند.
- ارسال پویا نسخه درست را انتخاب می کند.