class-methods
کاربرد اصلی و نهایی متدها درون کلاسها تعریف میشود، در این جلسه قصد داریم با کلاسها و چگونگی قرارگیری متدها درون آنها بیشتر آشنا شویم، پس در ادامه همراه باشید.
در جلسات پیش با ساخت انواع متد آشنا شدید،اما اجازه دهید دوباره چند نکته‌ی مهم را با هم مرور کنیم:

نکته۱: متدها دستورالعمل هایی هستند در قالب یک برنامه ی کوچک، که با فراخوانی نام آن ها (و احیانا پاس دادن مقداری داده)به دستورات شما پاسخ می دهند.

نکته۲: متدها می توانند مقداری داده را دریافت و مقداری داده را نیز ارسال کنند.

نکته۳:گیرنده‌ی خروجی هر متد، صرفاً برنامه نویس نیست ،گیرنده‌ی مقدار خروجی هر function، میتواند قطعه کدی باشد که احتیاج به محاسبه ای خاص دارد وآنرا به متد مورد نظر پاس داده است.

نکته۴:متدها درون کلاسها ساخته می شوند و جزیی از آنها هستند. پس برای فراخوانی آنها باید نام کلاس مربوط به آن متد را نیز بدانید.

اگر به خاطر داشته باشید تا حدودی درمورد کلاسها همچنین مباحث شی‌گرایی در جلسات قبل توضیح دادیم، توجه کنید برای درک بهتر ادامه‌ی این جلسه، حتما مطالب این پست را دوباره مطالعه کنید.

در ادامه مثالهایی خواهید دید ،که شمارا با جایگاه متدها درون کلاس بیشتر آشنا خواهد کرد:

٭ تمامی کدها و مثال ها را می توانید در بخش playground تست کنید.

class person {
    
    init(){
        print("New person Object Initialized")
    }
}
همانطور که در این مثال مشاهده میکنید، کلاسی ساختیم به نام person که درون آن چیزی جز متد "اجباری" ()init وجود ندارد.همانطور که در جلسه آشنایی با کلاسها اشاره کردیم، متد () init لازمه‌ی ساخت هر کلاس است،و دستورات درون آن بلافاصله در زمان فراخوانی کلاس اجرا خواهند شد ،فراخوانی یک کلاس، به واسطه‌ی ساخت یک شئ از آن کلاس انجام میپذیرد.ساخت شئ از یک کلاس به معنی آن است که به آن کلاس در هر نقطه ای از برنامه، موجودیت دهیم، این کار برای دسترسی به ویژگی ها (Property) همچنین متدهای آن کلاس، الزامی است، پس برای دسترسی به متدها و property های یک کلاس صرفا نمیتوان نام آن کلاس را صدا زد، چرا که باید ابتدا از کلاس مورد نظر یک Object ساخته شود.
نکته:نگران نباشید، مفهوم (ویژگی) یا (Property) را هنوز فرا نگرفته اید و در اینجا صرفا اشاره ای کوچک به آن شده است، محض اطلاع ، ویژگی ها نوعی متغیر هستند که در کلاسها کاربرد دارند،در جلسات بعد با آنها آشنا خواهید شد.
برای ساخت یک شئ از کلاس، باید نام کلاس را در یک متغیر صدا بزنید، چرا که متغیر پس از آن، جانشین کلاس شده و میتواند ویژگی ها و متدهای کلاس را ذخیره و در مواقع لازم صدا بزند.با مثال زیر همه چیز ساده به نظر خواهد آمد:
var myClass:person = person()
اگر بخواهیم تعریف دقیقتری داشته باشیم، از این پس متغیر MyClass به کلاس person اشاره خواهد داشت، این اشاره برای آن است که بتوانیم به ویژگی ها، همچنین متدهای کلاس person در مکانی دیگر و یا کلاسی دیگر دسترسی داشته باشیم.
این کار زمانی به کمک شما خواهد آمد که پروژه های بزرگی دارید و میخواهید از کلاسی، به وظایف و متدهای کلاسی دیگر دسترسی داشته باشید.
توجه کنید، کد بالا را پس از پایان کد class بنویسید، و همانطور که در خروجی مشاهده میکنید، به محض اینکه از کلاس فوق شئ ساخته ایم، دستورات ()print درون متد ()init اجرا شده است و عبارت New person Object Initialized ظاهر شده, مطابق تصویر زیر:
(برای مشاهده تصویر در اندازه واقعی روی آن کلیک کنید)
Class-Init-Methode
میدانیم که متدها درون کلاسها تعریف میشوند، حال میخواهیم متدی ساده به کلاس فوق اضافه کنیم، به مثال زیر توجه کنید:
                                                             ٭ تمامی کدها و مثال ها را می توانید در بخش playground تست کنید.
class person {
    
    init(){
        print("New person Object Initialized")
    }
    
    func sayHello(){
        print("Hello World !")
    }
}
در این مثال کلاس قبلی را که ساخته ایم داریم، فقط متدی به نام ()sayHello را به آن اضافه کردیم، توجه کنید که متدها باید بعد از متد اجباری ()init نوشته شوند.برای فراخوانی متد درون این کلاس، طبق گفته های قبل ابتدا باید از کلاس person شئ ساخته باشیم، سپس با فراخوانی نام شئ ساخته شده و با زدن علامت نقطه ، میتوانیم از لیست بازشونده، متد مربوط به این کلاس را فراخوانی کنیم، مطابق دستور زیر:
var myClass:person = person()
myClass.sayHello()
پس با صدا کردن متد ()sayHello در خروجی عبارت ! Hello World ظاهر میشود.
نکته:به یاد داشته باشید پس از نام شئ ساخته شده از کلاس، نام متد مورد نظر را فراخوانی کنید، همچنین علامت پرانتز ها را (بعد از نام متد) فراموش نکنید.
در جلسات بعد بیشتر با کلاسها و چینش متدها، درون آنها آشنا خواهید شد.

جواب چالش :در جلسه‌ی گذشته چالشی را تدارک دیده بودیم، جواب چالش به صورت زیر خواهد بود:
func area(X:Float , Y:Float) -> (String,Float) {
    
    var message:String = "area is \(X*Y)"
    var Number:Float = (X*Y)/2
    
    return (message, Number)
}
  • یادآوری:دوستان عزیزی که ابتدا پست های جدید رو مطالعه میکنند،توجه کنید که برای دیدن پست های قبلی و ابتدای این دوره آموزشی، باید به پایینی ترین پست مراجعه کنید و به صفحات قبل برگردید،چرا که ترتیب کلاسها بسیار حائز اهمیت است .