structure یا ساختمان نوعی از داده ها هستند، که امکان ذخیره کردن چند نوع داده مثل Int یا String را درون خودشان دارند.
برای مثال میخواهیم اطلاعات یک دانشجو مثل شماره دانشجویی، نام و عکسش را ذخیره کنیم. برای این که چند نوع داده مرتبط به یک چیز را ذخیره کنیم میتوانیم از Struct ها استفاده کنیم.
برای این کار از کلمه کلیدی struct
استفاده میکنیم و متغیر ها را درون آن تعریف میکنیم.
struct Student {
var stdNum: Int
var name: String
var image: String
}
Student
از اسم های دیگری هم میتوانید، استفاده کنید، در واقع اسمی که بعد از کلمه کلیدی struct
میگذارید نام استراکچر شما هست.برای این کار یک متغیر تعریف میکنیم و بعد اسم struct مد نظرمون را مینویسیم و پارامتر هایی که درونش تعریف کردیم را مقدار دهی میکنیم. به مثال زیر دقت کنید.
var std = Student(stdNum: 10044, name: "Milad", image: "image1")
برای دسترسی به خانه استراکچری که ساختیم میتوانیم اسم آن را بنویسیم سپس با گذاشتن نقطه و نام متغیری که به آن نیاز داریم، به متغیر مد نظر دسترسی پیدا کنیم.
var elena = Student(stdNum: 10092, name: "elena", image: "image2")
print(elena.stdNum)
خروجی:
10092
علاوه بر تعریف متغیر درون استراکچر، میتوانیم یک تابع یا متود هم درون آن تعریف کنیم.
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 تعریف میکنید.
اگر مبحث مربوط به optional ها را فراموش کردید میتوانید از این لینک در مورد این موضوع بیشتر بخوانید.
struct Forms {
var name: String
var job: String
var suggest: String?
}
let member = Forms(name: "fatma", job: "swift programmer")
یکی از مبحث های یک مقدار گمراه کننده در struct ها، initializer ها هستند، که در واقع وظیفه مقدار دهی اولیه دارند، بصورت کلی میتوانم دو وظیفه اصلیشون را به اینصورت بیان کنم.
حالا برای هر کدام یک مثال بزنیم.
برای تعریف آن از کلمه کلیدی 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
این بار هم از کلمه کلیدی 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