متدهای کلاس (Class Methods)
«متدهای کلاس (Class Methods)» روی خود نوع اجرا می شوند، نه روی شیء. برای ساخت آن ها در سوئیفت، از کلیدواژه های «class» یا «static» استفاده می کنیم. تفاوت شان مهم است و جلوتر می بینیم.
تفاوت static و class
«static» متدی می سازد که در زیرکلاس ها قابل override نیست. «class» متدی می سازد که زیرکلاس ها می توانند آن را override کنند. یعنی مثل قوانین مدرسه؛ بعضی قوانین سفت وسخت اند، بعضی قابل تغییرند.
class Math {
class func square(_ n: Int) -> Int {
return n * n;
}
static func cube(_ n: Int) -> Int {
return n * n * n;
}
}
print(Math.square(4));
print(Math.cube(3));
نکته: اگر نیاز به تغییر رفتار در ارث بری داری، از class استفاده کن. اگر نمی خواهی هیچ زیرکلاسی تغییرش دهد، static بهتر است.
مثال override روی متدهای نوع
در این مثال، متد نوع با class در زیرکلاس override می شود. اما متد static قابل override نیست. این مثل دکمه تنظیمات بازی است؛ برخی تنظیمات قفل اند.
class Base {
class func greet() {
print("Base");
}
static func ping() {
print("Base ping");
}
}
class Sub: Base {
override class func greet() {
print("Sub");
}
}
Base.greet();
Sub.greet();
Base.ping();
گام های عملی سریع
- یک کلاس بساز و یک متد با
classتعریف کن. - یک متد دیگر با
staticبساز و خروجی بده. - یک زیرکلاس ایجاد کن و متد
classرا override کن. - هر دو متد را صدا بزن و نتیجه را بررسی کن.
لینک های مرتبط داخلی
برای آشنایی با «ویژگی های کلاس»، به ویژگی های کلاس برو. همچنین، با کلیدواژه self کار سازنده ها را بهتر می فهمی. برای مرور عنوان همین صفحه، متدهای کلاس را نشانه گذاری کن.
جمع بندی سریع
classقابل override است.staticقابل override نیست.- متدهای کلاس روی نوع صدا می خورند.
- برای ارث بری منعطف، از
classاستفاده کن.