دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۲
  • آبان

جلسه ۲۶ : مقداردهی اولیه در Swift

  • دسته‌بندی‌ها :
جلسه ۲۶ : مقداردهی اولیه در Swift
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش Swift را دنبال می کنند. کلاس ها ، ساختارها و شمارنده ها که در Swift 4 اعلام می شوند، برای ایجاد یک نمونه کلاس مقدار دهی اولیه می شوند، مقدار اولیه برای خصوصیات ذخیره شده و همچنین و برای نمونه های جدید نیز تعریف می شود. کلید واژه ی ایجاد تابع مقدار دهی اولیه ‘()init’ می باشد. initializer در Swift 4 با Objective-C در این مورد تفاوت دارد که مقدار را بازگشت نمی دهد. تابع initialization (مقدار دهی اولیه) برای بررسی مقادیر جدید و تازه ایجاد شده قبل از پردازش می باشد. برای آشنایی بیشتر با چگونگی کار با مقداردهی اولیه در Swift در ادامه ی این مبحث با ما همراه باشید.

      کار با مقداردهی اولیه در Swift

      در این آموزش شما با سینتکس و موارد مربوط به مقداردهی اولیه در Swift آشنا خواهید شد.

      قوانین initializer برای خصوصیات ذخیره شده

      خصوصیات ذخیره شده باید نمونه هایی را برای کلاس ها و ساختارهای خود قبل از پردازش نمونه ها، آنالیز کنند.

      خواص ذخیره شده از initializer برای اختصاص دادن و مقداردهی کردن مقادیر استفاده می کند.

      بنابراین نیاز به فراخوانی خصوصیت observer نمی باشد.

      Initializer در خصوصیات ذخیره شده استفاده می شود:

      • برای ایجاد یک مقدار اولیه.
      • برای تعیین ارزش خصوصیات  پیش فرض در تعریف ویژگی.
      • برای مقداردهی اولیه یک نمونه برای نوع داده خاص، از ()init استفاده می شود.

      سینتکس :

      مثال : 

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      در ساختار فوق ‘rectangle’ با اعضای length و breadth و با نوع داده ی ‘Double’ مقداردهی اولیه شده اند.

      متد ()Init برای مقداردهی اعضای جدید و نوع double ایجاد شده است.

      مساحت مستطیل با فراخوانی تابع rectangle محاسبه می شود.

      تنظیم مقادیر پیش فرض خصوصیات

      زبان Swift 4 متد ()Init را برای مقداردهی اولیه خصوصیات ذخیره شده ارائه می دهد.

      کاربر مقادیری را برای مقدار دهی اولیه در هنگام تعریف اعضای ساختار و کلاس هاست.

      زمانیکه کاربر ارث بری کلاس ها و ساختارها را تعریف می کند، تنظیم مقادیر پیش فرض خصوصیات فعال می شود.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      پارامترهای مقدار دهی اولیه

      در زبان Swift 4 کاربر برای تعریف پارامترهای اولیه به عنوان بخشی از initializer از متد ()Init استفاده می کند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      پارامترهای محلی و خارجی

      پارامترهای اولیه هر دو نام پارامترهای محلی و عمومی  را مشابه پارامترهای تابع و متد داراست.

      اعلام پارامترهای محلی برای دسترسی به بدنه ی اولیه و اعلام پارامترهای خارجی نیز برای فراخوانی initializer استفاده می شود.

      Swift 4 یک نام خارجی را برای هر یک از پارامترها در ()init اعلام می کند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      پارامترهای فاقد نام خارجی

      زمانیکه یک نام خارجی برای مقدار دهی اولیه نیاز ندارید، از کاراکتر  ‘_’  برای اعمال رفتار پیش فرض استفاده می شود.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      انواع گزینه های اختیاری

      هنگامی که خصوصیات ذخیره شده در برخی نمونه ها هیچ مقداری را برنمی گردانند، این خصوصیت از نوع ‘optional’ اعلام می شود.

      دز این صورت مقدار  ‘no value’ برای آن نوع خاص بازگردانده می شود.

      زمانیکه خصوصبت ذخیره شده به عنوان ‘optional’ اعلام می شود، به طور خودکار مقدار “nil” در زمان مقدار دهی اولیه تنظیم می گردد.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      دستکاری خصوصیات ثابت در حین مقداردهی اولیه

      Initialization همچنین به کاربر اجازه می دهد تا مقدار خصوصیات ثابت را نیز دستکاری کند.

      در طی initialization خصوصیت کلاس اجازه می دهد که کلاس های نمونه توسط ابرکلاس ها دستکاری شوند نه توسط زیر کلاس ها.

      به عنوان مثال در برنامه قبلي ‘length’ به عنوان متغير در کلاس اصلي اعلام شده است.

      در مثال زیر متغیر ‘length’ به عنوان یک ثابت اعلام شده است:

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      initializer های پیش فرض

      initializer های پیش فرض یک نمونه ی جدید را به تمام خصوصیات اعلام شده در کلاس پایه و ساختارها ارائه می دهند.

      مثال:

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      برنامه ی فوق با نام کلاس ‘defaultexample’ تعریف شده است.

      سه عضو تابع به نام های  ‘studname?’ با ذخیره مقدار ‘nil’ ، متغیر ‘stmark’ با ذخیره مقدار ۹۸ و متغیر ‘pass’ از نوع Boolean با ذخیره مقدار ‘true’ مقداردهی اولیه شده اند.

      به همین ترتیب، مقادیر عضو در کلاس می تواند به صورت پیش فرض قبل از پردازش انواع عضو کلاس، مقداردهی شود.

      Initializer درونگرایانه برای انواع ساختارها

      زمانیکه initializer سفارشی توسط کاربر معرفی نشده اند، انواع ساختار در Swift 4 به طور خودکار ‘memberwise initializer’ را دریافت می کنند.

      این تابع اصلی برای مقدار دهی اولیه ی نمونه های ساختار جدید با memberwise initialize پیش فرض است.

      سپس خصوصیات نمونه های جدید به memberwise initialize توسط نام ارسال می شوند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      ساختارها در حالت پیش فرض برای توابع عضو خود در طول initialization با مقداردهی ‘length’ برابر با ‘۱۰۰٫۰’ و ‘breadth’ برابر با ‘۲۰۰٫۰’ تنظیم می شوند.

      اما در طول پردازش برنامه متغیرهای length و breadth با مقادیر ۲۴٫۰ و ۳۲٫۰،در نظر گرفته می شوند.

      Initializer Delegation برای انواع مقادیر

      Initializer Delegation برای فراخوانی initializer از سایر initializerها تعریف شده است.

      کاربرد اصلی آن این است که به خاطر قابلیت استفاده ی مجدد، از تکرار کدها جلوگیری می کند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      قوانین Initializer Delegation

      Value TypesClass Types
      وراثت برای انواع مقادیر مانند ساختارها و شمارنده ها پشتیبانی نمی شود.وراثت پشتیبانی شده و تمام مقادیر ذخیره شده را بررسی می کند.

      مقداردهی اولیه و وراثت کلاس

      انواع کلاس دو نوع initializer که با عنوان designated initializers و convenience initializers شناخته شده برای بررسی اینکه خصوصیات ذخیره شده مقدار اولیه را دریافت می کنند، دارند.

      designated initializers و convenience initializers

      Designated InitializerConvenience Initializer
      برای مقداردهی اولیه یک کلاس در نظر گرفته شده است.در نظر گرفته شده به عنوان پشتیبانی اولیه برای یک کلاس.
      تمام خصوصیات کلاس مقداردهی اولیه شده اند و برای بازگشت بیشتر برای بازنشانی مناسب ابرکلاس نامیده می شوند.Designated initializer به همراه convenience initializer برای ایجاد نمونه کلاس برای تشخیص نوع ورودی فراخوانی می شود.
      حداقل یک designated initializer برای هر کلاس تعریف شده است.بدون نیاز به convenience initializers تعریف می شود زمانی که کلاس نیازی به اولیه سازی ندارد.
      {Init(parameters) { statements{convenience init(parameters) { statements

      برنامه برای Designated initializer

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      برنامه برای Convenience Initializers

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      Overriding و وراثت initializer

      Swift 4 اجازه نمی دهد که زیرکلاس ها در حالت پیش فرض initializer های ابر کلاس ها را برای انواع اعضای خود به ارث برند.

      وراثت در initializer های ابر کلاس ها قابل اجراست.

      زمانیکه کاربر نیاز دارد تا initializer ها در ابرکلاس ها تعریف شوند، زیر کلاس ها با initializer ها توسط کاربر برای پیاده سازی سفارشی تعریف شده است.

      زمانیکه overriding توسط زیر کلاس در ابر کلاس تعریف شده باشد توسط کلید واژه ی ‘override’ تعریف شده است :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

       initializer های Designated و Convenience در عمل

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      Initializer غیر قابل اجرا

      در هنگام تعریف یک کلاس، ساختار یا مقادیر شمارش شده، توسط کاربر، باید در صورت وقوع هر گونه خراب شدن اولیه، اطلاع رسانی شود.

      مقداردهی اولیه متغیرها گاهی به علل زیر با خطا رو به رو می شود:

      • مقادیر پارامتر نامعتبر.
      • عدم وجود منبع خارجی مورد نیاز.
      • وضعیت جلوگیری از راه اندازی اولیه از موفقیت.

      برای بذست آوردن catch exceptions توسط متدهای مقداردهی اولیه، Swift 4 یک مقدار اولیه انعطاف پذیر را به نام ‘initializer ناکام’ تولید می کند تا کاربر را مطلع کند.

      کلید واژه ی ‘init?’ برای بدست آوردن مقداردهی اولیه ناموفق است، همچنین initializerهای ناموفق را نمی توان با یک نوع پارامتر و نام تعریف کرد.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      initializer های غیر قابل اجرا برای شمارنده ها

      زبان Swift 4 انعطاف پذیری را برای initializer های غیر قابل اجرا برای شمارنده ها را نیز ارائه می کند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      initializer های غیر قابل اجرا برای کلاس ها

      یک initializer غیر قابل اجرا زمانی که با شمارنده ها و ساختارها اعلام می شود، در مورد خطاهای اولیه در پیاده سازی اولیه آن هشدار می دهد.

      با این حال، initializer نامعتبر در کلاسها، فقط بعد از خواندن خواص ذخیره شده به مقدار اولیه اخطار می دهد.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      Overriding در initializer غیر قابل اجرا

      همانند مقدار اولیه، کاربر همچنین دارای محدودیت هایی است که یک برنامه واسط برنامه نویسی ابر کلاس را در داخل زیر کلاس override می کند.

      کلاس اولیه ابر کلاس نیز ممکن است با استفاده از یک واسط کاربری غیرقابل تصحیح زیر کلاس override شود.

      یک مقداردهی اولیه ناکارآمد هرگز نمی تواند به یک مقداردهی مجدد ناموفق منتقل کند.

      برنامه ای که در زیر آورده است، واسط های ناموفق و غیر قابل شکست را توصیف می کند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      Initializer غیر قابل اجرای init!

      Swift 4 عبارت ‘init?’ را برای تعریف یک نمونه اولیه اختیاری ممکن است.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      Initializer های مورد نیاز

      برای اعلام هر زیرمجموعه از کلیدواژه ‘required’ اولیه باید قبل از تابع () init تعریف شود.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای مثال فوق :

      مثال : 

      کلام آخر

      کلاس ها ، ساختارها و شمارنده ها که در Swift 4 اعلام می شوند، هر یک برای ایجاد یک نمونه از کلاس مقدار دهی اولیه می شوند، از این رو در این بخش شما را با مقداردهی اولیه در Swift و سیستم آن آشنا کردیم.

      QR:  جلسه ۲۶ : مقداردهی اولیه در Swift
      به اشتراک بگذارید