آموزش کامل Struct در سوئیفت

زمان مطالعه : ۴ دقیقه
آخرین بروزرسانی : ۰۷ اسفند ۱۴۰۰
یادگیری و آموزش struct یا استراکچر در زبان برنامه نویسی سوئیفت

Struct چیست؟

structure یا ساختمان نوعی از داده ها هستند، که امکان ذخیره کردن چند نوع داده مثل Int یا String را درون خودشان دارند.

برای مثال میخواهیم اطلاعات یک دانشجو مثل شماره دانشجویی، نام و عکسش را ذخیره کنیم. برای این که چند نوع داده مرتبط به یک چیز را ذخیره کنیم میتوانیم از Struct ها استفاده کنیم.

تعریف Struct در Swift

برای این کار از کلمه کلیدی struct استفاده میکنیم و متغیر ها را درون آن تعریف میکنیم.

struct Student {
    var stdNum: Int
    var name: String
    var image: String
}
نکته:
  • بجای Student از اسم های دیگری هم میتوانید، استفاده کنید، در واقع اسمی که بعد از کلمه کلیدی struct میگذارید نام استراکچر شما هست.

ساخت نمونه ای از Struct در Swift

برای این کار یک متغیر تعریف میکنیم و بعد اسم struct مد نظرمون را مینویسیم و پارامتر هایی که درونش تعریف کردیم را مقدار دهی میکنیم. به مثال زیر دقت کنید.

var std = Student(stdNum: 10044, name: "Milad", image: "image1")

دسترسی به خانه های استراکچر

برای دسترسی به خانه استراکچری که ساختیم میتوانیم اسم آن را بنویسیم سپس با گذاشتن نقطه و نام متغیری که به آن نیاز داریم، به متغیر مد نظر دسترسی پیدا کنیم.

var elena = Student(stdNum: 10092, name: "elena", image: "image2")
print(elena.stdNum)

خروجی:

10092
نکته:
  • مبحث Struct ها بسیار مهم هستند! مخصوصا در SwiftUI کاربرد زیاد دارند، پس سعی کنید خوب یادش بگیرید!

تعریف تابع درون Struct در Swift

علاوه بر تعریف متغیر درون استراکچر، میتوانیم یک تابع یا متود هم درون آن تعریف کنیم.

struct Songs {
    var year: Int
    var songName: String
    var img: String

    func play() {
        print("I'm playing \(songName) and it was released in \(year)")
    }

}

حالا میخواهیم یک نمونه از استراکچر Songs بسازیم.

var taylorSwift = Songs(year: 2020, songName: "Willow", img: "willow-img")
taylorSwift.play()

خروجی:

I'm playing willow and it was released in 2020
نکته:
  • همانطور که میبینید تابع درون Struct امکان دسترسی به متغیر های درون آن را دارد.

تعریف Struct با متغیر اختیاری (optional)

ممکن است شما نیاز داشته باشید متغیری در Struct تعریف کنید که شاید استفاده نشود، برای مثال میخواهید از کاربر فیلدی با مضمون پیشنهادات بگیرید، که ممکن است کاربر این فیلد را پر کند و یا ممکن است خالی بگذارد.

در این مواقع میتوانید موقع تعریف متغیر در Struct از علامت ? استفاده کنید. یعنی دارید متغیر را از نوع Optional تعریف میکنید.

اگر مبحث مربوط به optional ها را فراموش کردید میتوانید از این لینک در مورد این موضوع بیشتر بخوانید.

struct Forms {
    var name: String
    var job: String
    var suggest: String?
}
let member = Forms(name: "fatma", job: "swift programmer")

Initializer چیست؟

یکی از مبحث های یک مقدار گمراه کننده در struct ها، initializer ها هستند، که در واقع وظیفه مقدار دهی اولیه دارند، بصورت کلی میتوانم دو وظیفه اصلیشون را به اینصورت بیان کنم.

  1. قرار دادن یک مقدار پیش فرض درون نسخه های (instance) یک Struct
  2. تغییر مقدار متغیر های درون struct بر حسب پارامتر های ورودی

حالا برای هر کدام یک مثال بزنیم.

1. تعریف Struct با مقدار دهی اولیه

برای تعریف آن از کلمه کلیدی init استفاده میکنیم.

struct Phone {
    var name: String
    init() {
        name = "iphone 12 pro max"
    }
}

var somePhone = Phone()
print(somePhone.name)

somePhone.name = "iphone 8 plus"
print(somePhone.name)

خروجی:

iphone 12 pro max
iphone 8 plus

2. مقداردهی اولیه Struct بر حسب پارامتر ورودی

این بار هم از کلمه کلیدی init استفاده میکنیم، اما این بار متغیری درون آن تعریف میکنیم.

struct Apple {
    var desc: String

    init(iphone: String) {
        desc = "\(iphone) is one of apple phones"
    }
    init(ipad: String) {
        desc = "\(ipad) is good for children"
    }
}

let phone = Apple(iphone: "iphone 12")
print(phone.desc)

let tablet = Apple(ipad: "ipad mini")
print(tablet.desc)

خروجی:

iphone 12 is one of apple phones
ipad mini is good for children
توضیحات بیشتر:
  • بجای ipad و iphone هر اسم دیگری هم که بخواهید میتوانید بگذارید.
  • سعی کردیم تا حد امکان با مثال های واضح initializer ها را توضیح دهیم، باز هم اگر سوالی داشتید میتوانید در بخش نظرات سوال خودتان را مطرح کنید.

این مقاله در حال بروز رسانی است و در آینده نزدیک مباحث جدید تری اضافه میشود...
میلاد خط شب
میلاد خط شب
معتقدم هر آدمی میتواند در یک زمینه ای مفید و تاثیر گذار باشد و اصولا آدم "غیر مفید" نداریم. فقط کافی است به موقع و صحیح راهنمایی شود.
پاسخ دهید


برخی از افرادی که این مقاله را پسندیدند 🥰

58