مفهوم Optional در سوئیفت

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

یکی از ویژگی های سوئیفت که باعث میشود کد ها کمتر با خطا مواجه شوند Optional ها هستند، حالا قبل از این که بخواهیم با مفهوم Optional ها آشنا بشویم، باید با nil آشنا بشویم.

مفهوم nil در سوئیفت

nil به فقدان یک مقدار و value در متغیر میگویند، یعنی در واقع یک فضایه خالی. وجود یک مقدار nil در برنامه میتواند باعث crush کردن و بسته شدن برنامه شما شود.

حالا بریم سراغ موضوع اصلی که Optional ها هستند.

Optional در Swift به چه معناست؟

optional در واقع یک نوع داده حساب میشوند و با علامت ? تعریف میشوند، مثلا با داده هایی از نوع Int یا String آشنا شده ایم. حال Optional یعنی متغیری که شما تعریف میکنید ممکن است از یک نوع داده خاص باشد (مثلا Double) یا اصلا مقداری نداشته باشد و nil باشد.

مثال:
  • ?String یعنی متغیری که شما تعریف میکنید ممکن است از نوع String باشد یا ممکن است nil باشد.
  • ?Int یعنی متغیری که شما تعریف میکنید ممکن است از نوع Int باشد یا ممکن است nil باشد.

حالا نحوه تعریف یک متغیر بصورت optional را در کد هم ببینیم:

var name: String?
print(name)
name = "Swift Programming Language"
print(name)

خروجی:

nil
optional("Swift Programming Language")
توضیحات بیشتر:
  • دقت کنید که چون متغیری که تعریف کردیم optional string هست، پس هنگام چاپ کردن، کلمه "optional" نیز با آن چاپ میشود.
  • نحوه پاک کردن کلمه optional از متغیر را جلوتر یاد میدهیم.

امکان قرار دادن متغیر optional در non-optional وجود دارد؟

در بعضی مواقع ما نیاز داریم که متغیری که مثلا بصورت ?Int تعریف شده را در متغیری از نوع Int قرار دهیم، آیا چنین چیزی امکان دارد؟ به مثال زیر دقت کنید

let age: Int? = 25
var age2: Int
age2 = age //Error: Value of optional type 'Int?' must be unwrapped to a value of type 'Int'
توضیحات بیشتر:
  • همانطور که میبینید امکان این کار وجود ندارد، و ابتدا باید عملیات unwrapping صورت گیرد.

دو روش کلی برای unwrap کردن متغیر ها وجود دارد:

1- Unwrapping متغیر ها در Swift

شاید یک مقدار برای شما گیج کننده بنظر بیاد، اما با کمی دقت میتوانید این تیکه کد پایین را درک کنید.

مفهوم این کد این است که اگر متغیر name وجود داشت و nil نبود، آن را درون متغیر unwrapped قرار بده و وارد بلوک if شو، در غیر این صورت وارد بلوک else شو!

var name: String?
name = "Milad"
if let unwrappedName = name {
    print("unwrapped var is: \(unwrappedName)")
} else {
    print("var is nil")
}

2- Force Unwrapping متغیر ها در Swift

به زبان خودمانی force unwrap کردن یک متغیر در سوئیفت به این معنا است که ما به سوئیفت این اطمینان رو میدهیم که حتما متغیر مد نظر ما پر شده و nil نیست. برای force unwrap کردن متغیر کافی است در انتهای آن علامت ! قرار دهیم.

let price: Int? = 25
var price2: Int
price2 = price!
print(price2)

خروجی:

25

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


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

56