گروه مقاله : ios
تاريخ انتشار : 1396/05/08 - 11:16
كد :7746
در این مقاله تفاوت کلاس ها و Structure ها را از نظر نوع داده بررسی می کنیم.
کلاس ها در سویفت از نوع رفرنس هستند
برخلاف value types ها reference types ها هنگامیکه به یک متغییر یا یک ثابت اختصاص داده میشوند کپی نمی شوند. این موضوع در مورد عملگرها هم صدق می کند. بجای یک کپی ، یک رفرنس در یک مقدار نمونه استفاده میشود.
در زیر مثالی با تعریف کلاس VideoMode قرار داده ایم:
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
این مثال یک ثابت جدید به نام tenEighty تعریف و آن را به یک کلاس به نام VideoMode اختصاص داده ایم. به این ترتیب VideoMode یک کپی از مقدار HD resolution با ابعاد 1080×1920 دریافت میکند. بعد به متغییر tenEighty یک نام 1080i داده و در گام بعد هم فریم بر ثانیه آنرا 25.0 که به معنی 25 فریم بر ثانیه است تغییر داده ایم..
در مرحله بعد ثابت tenEighty را درون متغییری به نام alsoTenEighty ریخته و مقدار فریم را به 30 افزایش داده ایم:
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
با توجه به رفرنس بودن کلاس ها متغییرهای tenEighty و alsoTenEighty هردو به یک ثابت VideoMode اشاره دارند.آنها فقط دو اسم متفاوت برای یک نمونه واحد میباشند.
اگر ویژگی framerate را برای متغییر tenEighty چاپ کنیم ، خواهیم دید که میزان فریم برثانیه اصلاح شده و 30 فریم برثانیه را نمایش میدهد.
print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// Prints "The frameRate property of tenEighty is now 30.0"
نکته : tenEighty و alsoTenEighty بصورت ثابت و نه متغییر تعریف شده اند . با اینحال شما همچنان قادر به تغییر tenEighty.frameRate و alsoTenEighty.frameRate هستید این اتفاق به این دلیل ممکن است که مقدار ثابت های tenEighty و alsoTenEighty در حقیقت تغییر نمیکند. این به این معنا است که ما در واقع میزان frameRate را در VideoMode تغییر میدهیم و نه مقدار آن را در ثابت های tenEighty و alsoTenEighty و به این ترتیب است که میتوان این دو را بصورت ثابت تعریف کرد.
تعریف عملگرها
با توجه به اینکه کلاس ها از نوع reference types هستند میتوانیم چندین ثابت و متغییر را به آنها ارجاع دهیم این موضوع درباره structures و شمارشگرها صدق نمی کند. زیرا که این دو، مقدار متغییرها را در خود کپی می کنند.
برای اینکه دو ثابت و متغییر که دقیقا به یک نوع کلاس ارجاع دارد را بیابیم میتوانیم از این دو علمگر سویفت استفاده کنیم:
Identical to (===) Not identical to (!==)
به مثال زیر نگاه کنید:
if tenEighty === alsoTenEighty { print("tenEighty and alsoTenEighty refer to the same VideoMode instance.") }
// Prints "tenEighty and alsoTenEighty refer to the same VideoMode instance."
نکته : سه علامت مساوی به معنی مساوی بودن مقدار و نوع متغییر و یا ثابت ها است . در حالیکه دوعلامت مساوی نشانه مساوی بودن مقادر دو متغییر و یا ثابت است.
بعد از اینکه کلاس و یا استراکچر خود را ایجاد کردید. میتوانید با استفاده از علائم مساوی و عدم مساوی متغییر های خود را به کلاس ها و استراکچر ها نسبت دهید.
براي بهره مندي از مشاوره تخصصي در زمینه برنامه نویسی IOS با شرکت سارگون تماس بگيريد.