فرآیند جستجو، تعریف ویژگی ها، زیرنویس ها و متدهای optional که ممکن است مقداری برابر “nil” داشته باشد به عنوان optional زنجیره ای تعریف شده است.

Optional chaining دو مقدار را برمیگرداند:

*اگر optional دارای یک مقدار باشد، آنگاه با فراخوانی ویژگی، متدها و زیرنویس های مربوطه می توانید آن مقدار را بدست آورید.
*اگر مقدار optional برابر با “nil” باشد، تمام ویژگی ها، متدها و زیرنویس های مرتبط با آن برابر صفر خواهند بود.

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

زنجیره Optional به عنوان گزینه ای برای Unwrapping اجباری

زنجیره Optional برای فراخوانی ویژگی، متد و یا زیرنویس پس از مقدار optional، علامت “؟” را قرار می دهد.

زنجیره optional “؟” دسترسی به متدها، ویژگی ها و زنجیره زیرنویس optional “!” برای Unwrapping اجباری
پس از مقدار optional برای فراخوانی ویژگی، متد یا زیرنویس، علامت ؟ قرار داده می شود. پس از مقدار optional برای فراخوانی ویژگی، متد یا زیرنویس، به منظور unwrapping  علامت ! قرار داده می شود.
زمانیکه مقدار اختیاری ‘nil’ باشد خطا رخ می دهد. هنگامی که مقدار اختیاری “nil” باشد، unwrapping خطای زمان اجرا ایجاد می کند.

برنامه زنجیره optional به همراه ‘!’

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

 

برنامه فوق با نام ” election poll” اعلام شده است که شامل “candidate” به عنوان اعضای تابع می باشد. کلاس فرعی با نام “poll booth” و “name” به عنوان اعضای تابع مشخص شده که مقدار اولیه آن با عنوان “MP” معرفی می شود. فراخوانی یک سوپر کلاس از طریق ایجاد یک نمونه “cand” با optional  ‘!’ آغاز می شود. از آنجا که مقادیر در کلاس پایه آن اعلام نشده است، در نتیجه مقدار “nil” ذخیره شده و با استفاده از روش unwrapping ، یک خطای مهلک نشان داده می شود.

برنامه زنجیره optional به همراه ‘?’

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

برنامه فوق با نام ” election poll” اعلام شده است که شامل “candidate” به عنوان اعضای تابع می باشد. کلاس فرعی با نام “poll booth” و “name” به عنوان اعضای تابع مشخص شده که مقدار اولیه آن با عنوان “MP” معرفی می شود. تعریف یک سوپر کلاس(ابر کلاس) از طریق ایجاد یک نمونه “cand” با optional  ‘?’ آغاز می شود. از آنجا که مقادیر در کلاس پایه اعلام نشده است، در نتیجه در کنسول توسط بلوک کنترل کننده مقدار “nil” ذخیره و چاپ می شود.

تعریف کلاسهای مدل برای optional زنجیره optional و دسترسی به ویژگی ها

زبان سوئیفت همچنین مفهوم زنجیره اختیاری(optional chaining) را برای اعلام بیش از یک کلاس فرعی به عنوان کلاس های مدل ارائه می دهد. این مفهوم برای تعریف مدل های پیچیده و دستیابی به ویژگیها، متدها و زیرنویس ها بسیار مفید خواهد بود.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

تابع ()circleprint در داخل کلاس فرعی ()circle با استفاده از نمونه ای به نام “Circname” تعریف می شود. اگر تابع دارای مقدار باشد همان مقدار، و در غیر این صورت با بررسی دستور ‘if circname.print?.circleprint() != nil’ تعدادی پیام از پیش تعریف شده توسط کاربر نشان داده خواهد شد.

فراخوانی متد ها از طریق زنجیره اختیاری

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

با استفاده از نمونه ای به نام “Circname” ، تابع ()circleprint که در داخل زیر کلاس ()circle اعلام شده است ، فراخوانی می شود. اگر تابع حاوی مقداری باشد ، مقدار آن را برمی گرداند ، در غیر این صورت با چک کردن عبارت ‘if circname.print?.circleprint() != nil’، پیام تعریف شده توسط کاربر را برمی گرداند.

 

دسترسی به زیرنویس ها از طریق زنجیره Optional

از زنجیره Optional برای تنظیم و بازیابی مقدار زیرنویس جهت اطمینان از نشان دادن یک مقدار بعد از فراخوانی آن زیرنویس استفاده می شود. قبل از براکت ها برای دسترسی به مقدار Optional در زیرنویس، علامت “؟” قرار داده می شود.

برنامه اول

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

در برنامه فوق مقادیر نمونه برای اعضای تابع “radiusName” مشخص نشده است. از این رو فراخوانی برنامه برای این تابع به جای return کردن مقادیر مربوط به اعضای تابع مربوطه موارد دیگری را برمیگرداند. ما باید مقادیری را برای اعضای تابع خاص تعریف کنیم.

برنامه دوم

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

در برنامه فوق مقادیر نمونه برای اعضای تابع “radiusName” مشخص شده است. از این رو اکنون فراخوانی برنامه برای این تابع مقادیری را برمیگرداند.

دسترسی به زیرنویس های نوع Optional

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

با مراجعه به مقادیر زیرنویس می توان به مقادیر Optional آنها دسترسی پیدا کرد که به صورت [subscript[0]، subscript[1 و غیره می باشد. مقادیر پیش فرض زیرنویس برای “radius” در مرحله اول بصورت [۳۵، ۴۵، ۷۸، ۱۰۱] و برای “Circle” بصورت [۹۰, ۴۵, ۵۶] مشخص می شود. سپس مقادیر زیرنویس به صورت [Radius[0 برابر ۷۸ و [Circle[1 برابر ۴۵ تغییر می یابد.

ارتباط سطوح مختلف زنجیره

کلاس های فرعی(زیر کلاس) چندگانه همچنین می توانند با متدهای کلاس اصلی، ویژگی ها و زیرنویس های آن توسط زنجیره آپشنال در ارتباط باشند.
در موارد زیر میتوان به زنجیره ی چندگانه optional متصل شد:
اگر نوع بازیابی optional نباشد، زنجیره optional مقدار آپشنال را برگشت میدهد. به عنوان مثال برای یک رشته خاص از طریق زنجیره optional مقدار ?String برگشت(return) خواهد شد.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

در برنامه فوق مقادیر نمونه برای اعضای تابع “radiusName” مشخص نشده است. از این رو فراخوانی برنامه برای این تابع به جای برگرداندن مقادیر مربوط به اعضای تابع مربوطه موارد دیگری را برگشت خواهد داد.
اگر نوع بازیابی از قبل optional باشد، زنجیره نیز مقدار optional را برمیگرداند. به عنوان مثال اگر ?String از طریق زنجیره optional قابل دسترسی باشد مقدار ?String برگردانده خواهد شد.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

در برنامه فوق مقادیر نمونه برای اعضای تابع “radiusName” مشخص است. از این رو اکنون فراخوانی برنامه برای این تابع مقادیری را برگشت خواهد داد.

زنجیره متدها به همراه مقدار بازگشتی Optional

از زنجیره Optional برای دستیابی به متدهای تعریف شده کلاس های فرعی(زیر کلاس) نیز استفاده می شود.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

کلیدواژه ها :

این خبر را به اشتراک بگذارید :