در برنامهنویسی iOS، استفاده از کلاسها (Classes) و استراکچرها (Structures) دو روش اصلی برای تعریف دادهها و عملکردهای مورد نیاز هستند. این دو مفهوم هر دو به شما اجازه میدهند تا دادهها و توابع مرتبط را در یک نوع داده جمعآوری کنید، اما تفاوتهای مهمی نیز بین آنها وجود دارد. در این پست، به بررسی این تفاوتها و کاربردهای هر یک میپردازیم.
کلاسها نوعی از دادهها هستند که قابلیت وراثت (Inheritance) دارند، به این معنا که میتوانید از یک کلاس پایه، کلاسهای دیگری ایجاد کنید که تمام ویژگیها و توابع کلاس پایه را به ارث میبرند. همچنین، کلاسها به صورت Reference Type هستند، به این معنا که وقتی یک کلاس را به یک متغیر دیگر اختصاص میدهید، هر دو متغیر به همان شیء اصلی اشاره میکنند.
استراکچرها نیز مشابه کلاسها هستند، اما چند تفاوت کلیدی دارند. استراکچرها Value Type هستند، به این معنا که هر وقت یک استراکچر را به یک متغیر دیگر اختصاص میدهید، یک کپی از دادهها ایجاد میشود. استراکچرها نمیتوانند وراثت را پشتیبانی کنند.
همانطور که مشاهده کردید، کلاسها Reference Type هستند، به این معنا که وقتی یک شیء کلاس به یک متغیر دیگر اختصاص داده میشود، هر دو متغیر به همان شیء اصلی اشاره میکنند. استراکچرها Value Type هستند و هر وقت یک شیء استراکچر به یک متغیر دیگر اختصاص داده میشود، یک کپی از دادهها ایجاد میشود.
مثال از Reference Type (کلاسها)
مثال از Value Type (استراکچرها)
وراثت به شما اجازه میدهد تا کلاسهای جدیدی بر اساس کلاسهای موجود ایجاد کنید. این ویژگی تنها در کلاسها موجود است و استراکچرها از آن پشتیبانی نمیکنند.
کلاسها و استراکچرها در هر دو فریمورک UIKit و SwiftUI به کار میروند. برای مثال، UIView و UIViewController در UIKit از کلاسها هستند. در SwiftUI، بسیاری از View ها به صورت استراکچر تعریف شدهاند.
در این پست، با تفاوتها و کاربردهای کلاسها و استراکچرها در Swift آشنا شدیم. هر کدام از این دو نوع داده ویژگیهای خاص خود را دارند و بسته به نیاز خود میتوانید از آنها استفاده کنید. در پستهای بعدی به موضوعات پیشرفتهتری مانند پروتکلها، کنترل دسترسی، و مدیریت حافظه خواهیم پرداخت.