phonebook
در این جلسه با یک مثال ساده ولی کاربردی مفاهیمی که قبلا تعریف کردیم را تمرین میکنیم،مثال ما یک دفترچه تلفن ساده است، پس در ادامه همراه باشید.

میخواهیم یک دفترچه تلفن طراحی کنیم،پس قطعا باید کل دفترچه تلفن را یک شئ تصور کنیم،همانطور که در عالم واقع یک شئ میباشد،پس اجازه دهید همچون قبل برنامه رو با ساخت یک کلاس آغاز کنیم،کلاسی به نام PhoneBook میسازیم،به کدهای زیر توجه کنید:
class PhoneBook {

}
همچون همیشه از ابتدا متد الزامی() Init را نیز درون کلاس مینویسیم،پس داریم:
class PhoneBook {
init(){
print("New Contact Created! Add Some Data.")
}
همانطور که میدانید در زمان ساخت اولین شئ از کلاس،متد ()Init فراخوانی میشود و دستور ()Print که در بالا مشاهده میکنید،اجرا میشود.
در ادامه ما باید تصور کنیم که در این دفترتلفن چه داده هایی را میخواهیم نگه داری کنیم،خیلی ساده ما اطلاعات مورد نظر را در سه گروه تقسیم میکنیم،این سه گروه عبارت اند از : نام،نام خانوادگی و شماره تماس.
همانطور که قبلا نیز گفته ایم داده های ضروری هر کلاس را در متغییری خاص به نام پراپرتی ذخیره و نگه داری میکنیم.و باز میدانیم محل تعریف یک پراپرتی در زیر نام کلاس و قبل از متد ()init میباشد،پس با دانستن این مطالب به سراغ قطعه کد میرویم و سه پراپرتی تعریف میکنیم:

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

var Name:String!
var Family:String!
var PhoneNumber:Int = 0

init(){

print("New Contact Created! Add Some Data.")
}
وجود علامت تعجب (!) به معنی آن است که متغیر فعلی(یا در اصل پراپرتی) در ابتدای ساخت دارای مقدار اولیه نمیباشد ولی در زمان استفاده از این متغیر ها قطعا این مقادیر با اطلاعات مناسب پر خواهد شد،به قولی با استفاده از این کلیدواژه به کامپایلر قول میدهید که اگرچه در حال حاضر متغیر دارای مقداری مشخص نیست،ولی قطعا در زمان فراخوانی، توسط شما یا خود کامپایلر،متغیر دارای مقداری منطقی و صحیح خواهد بود.در جلسات بعدی با اینگونه کلیدواژه ها بیشتر آشنا خواهید شد.
به سراغ اولین متد برویم،متدی که بیش از همه و در ابتدا مورد نیاز است، متد ()Add خواهد بود.توجه کنید ما میخواهیم مقادیر<مشخصات> هر فرد را گرفته و در پراپرتی های موجود در کلاس ذخیره کنیم،متد را به این صورت بسازید:
    func Add(PersonName:String,PersonFamily:String,PersonPhoneNum:Int){
        self.Name = PersonName
        self.Family = PersonFamily
        self.PhoneNumber = PersonPhoneNum
        print("One Person that name is \(self.Name) \(self.Family) \nis now on PhoneBook.")   }
نکته: توجه داشته باشید مقادیری که یک متد میتواند دریافت بکند را باید در زمان ساخت متد نوشته و در زمان ساخت شی و استفاده از آن متد باید با مقادیر مناسب پر کنید.به عنوان مثال مقدار ورودی متغیر PersonPhoneNum فقط باید مقداری عددی را دریافت کند و این دریافت در زمانی اتفاق میفتد که شما نام این متد را فراخوانی کنید.
خوب،تا به اینجای کار متدی را ساختیم که مقادیری را دریافت میکند(خط اول)،سپس برای ذخیره ی این مقادیر باید آنها را به پراپرتی های کلاس پاس دهیم تا دیگر متغیر ها نیز بتوانند از آنها استفاده کنند.در خط های دوم تا چهارم  متغیر های دریافتی به داخل پراپرتی ها منتقل میشود،توجه کنید استفاده از کلیدواژه ی self ضروری نیست ولی توصیه میشود از آن استفاده کنید،چرا که با استفاده از این کلیدواژه شما متوجه میشوید این متغیر ها درون کلاس فعلی تعزیف شده،و باعث سهولت در فهم کد شما میشود،و در نهایت عادت به این کدینگ باعث میشود در پروژه های بزرگتر به مشکل بر نخورید.
اگر بخواهید کدهای بالا را تا به اینجای کار تست و کامپایل کنید باید خروجی شما چیزی شبیه به تصویر زیر بشود:
(برای مشاهده تصویر در اندازه واقعی روی آن کلیک کنید)

ADD-PhoneBook-Class
یادآور: برای استفاده از یک کلاس همچنین متدهای آن، حتما باید از کلاس مربوطه ابتدا یک شئ بسازید.
ساخت شی از کلاس PhoneBook به صورت زیر خواهد بود:

var newPhoneBook:PhoneBook = PhoneBook()
سپس همانطور که در تصویر بالا مشاهده میکنید پس از نام شئ میتوانید با تایپ نقطه، متد ()Add را مورد استفاده قرار دهید.
اضافه کردن یک شخص در دفتر تلفن ابتدایی ترین بخش میباشد، پس از آن باید بتوانیم مشخصات یک شخص را که میدانیم درون دفتر تلفن هست را تغییر دهیم،برای انجام این کار متدی به نام ()Edit میسازیم:

func Edit(PersonName:String,NewPersonName:String,NewPersonFamily:String,NewPersonPhoneNum:Int){
        if PersonName == self.Name {
            self.Name = NewPersonName
            self.Family = NewPersonFamily
            self.PhoneNumber = NewPersonPhoneNum
            print("contact name <\(PersonName)> is update to:\nName:\(NewPersonName)\nFamily:\(NewPersonFamily)\nPhone number:\(NewPersonPhoneNum)")
        }else{
            print("you can't Edit this contact \nbecause this name:<\(PersonName)> is not in your contact!")
        }
    }
این متد کاربردی واضح دارد،ابتدا نام فرد مورد نظر را که قصد تغییر مشخصاتش را دارید را باید درون متد وارد کنید،این نام درون متغیر PersonName قرار میگیرد،سپس مشخصات جدید را برای این فرد تکرار میکنید،اما شرطی وجود دارد،اگر این نام درون دفتر تلفن موجود باشد،این تغییرات صورت میگیرد،در غیر این صورت پیغام خطایی که در دستور پرینت دوم نوشتیم اجرا میشود.تا به اینجای کار دستورات به این صورت نوشته شدند:

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

class PhoneBook {
    
    var Name:String!
    var Family:String!
    var PhoneNumber:Int = 0
    
    init(){
        
        print("New Contact Created! Add Some Data.")
    }
    
    func Add(PersonName:String,PersonFamily:String,PersonPhoneNum:Int){
        self.Name = PersonName
        self.Family = PersonFamily
        self.PhoneNumber = PersonPhoneNum
        print("One Person that name is \(self.Name) \(self.Family) \nis now on PhoneBook.")
    }
    func Edit(PersonName:String,NewPersonName:String,NewPersonFamily:String,NewPersonPhoneNum:Int){
        if PersonName == self.Name {
            self.Name = NewPersonName
            self.Family = NewPersonFamily
            self.PhoneNumber = NewPersonPhoneNum
            print("contact name <\(PersonName)> is update to:\nName:\(NewPersonName)\nFamily:\(NewPersonFamily)\nPhone number:\(NewPersonPhoneNum)")
        }else{
            print("you can't Edit this contact \nbecause this name:<\(PersonName)> is not in your contact")
        }
    }
}
var newPhoneBook:PhoneBook = PhoneBook()
newPhoneBook.Add("sepanta", PersonFamily: "samandarian", PersonPhoneNum: 0912123456)
در جلسات بعدی متد های دیگری به این دفترتلفن اضافه خواهیم کرد.
تمرین: از متد ()Edit که در آخر نوشتیم استفاده کنید و نتایج را مشاهده کنید.
نکته :دوستان عزیز، اگر در طول آموزش به سوالی برخورد کردید، لطفا برای بهتر شدن آموزشها همچنین برای بهره بردن دیگر دوستان، حتما در بخش نظرات سوال خود را مطرح کنید، و من تلاش خواهم کرد، در اسرع وقت به سوالات شما پاسخ دهم.
با تشکر.