مقابلة - 10 أسئلة حول سويفت. الجزء 2

يتبقى وقت أقل حتى بدء دورة iOS Developer ، لذلك نواصل اليوم نشر مواد من سلسلة 10 أسئلة حول سلسلة Swift. الجزء الأول منها يمكن قراءتها هنا .



شرح الأدوية الجنيسة في سويفت؟


تتيح لك الوراثة (القوالب العامة) كتابة وظائف وأنواع مرنة قابلة لإعادة الاستخدام يمكن أن تعمل مع أي نوع. يمكنك كتابة التعليمات البرمجية التي تتجنب الازدواجية وتعبر عن الغرض منها بطريقة واضحة ومجردة.

أنواع المصفوفات والقاموس في Swift عبارة عن مجموعات عامة (عامة).
في الكود أدناه ، يتم استخدام دالة عالمية لمبادلة قيمتين لسلسلة و عدد صحيح. هذا مثال على الكود القابل لإعادة الاستخدام.

func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } var num1 = 4 var num2 = 5 var str1 = “a” var str2 = “b” swapTwoValues(&num1,&num2) swapTwoValues(&str1,&str2) print (“num1:”, num1) //output: 5 print (“num2:”, num2) //output: 4 print (“str1:”, str1) //output: b print (“str2:”, str2) //output: a 

ما هي الأنواع الاختيارية بسرعة ومتى يجب استخدامها؟


اختياري (اختياري ، "اختياري") في Swift هو النوع الذي قد تكون أو لا تكون فيه القيمة. تتم الإشارة إلى الخيارات عن طريق إضافة "؟" إلى أي نوع.

خيارات لاستخدام اختياري:

  1. مقتطفات الشفرة التي قد تفشل (كنت أتوقع شيئًا ، لكن لم أستلم شيئًا).
  2. الكائنات الفارغة حاليًا ولكنها قد تصبح شيئًا لاحقًا (والعكس صحيح).

مثال جيد على اختياري:

خاصية قد تكون موجودة أو لا تكون موجودة ، مثل الاسم الأوسط أو الزوج / الزوجة في فئة الشخص.

طريقة يمكنها إرجاع قيمة أو لا شيء ، على سبيل المثال ، مطابقة في صفيف.

محاولة لإرجاع نتيجة أو خطأ وإرجاع أي شيء ، على سبيل المثال ، حاول قراءة محتويات ملف (كنتيجة لإرجاع بيانات الملف عادةً) ، لكن الملف غير موجود.

تفويض الخصائص التي لا يجب دائمًا تعيينها وتعيينها عادة بعد التهيئة.

مثل الروابط الضعيفة في الفصول . ما يشيرون إليه يمكن ضبطه على الصفر في أي وقت.

إذا كنت بحاجة إلى طريقة لمعرفة متى يتم تعيين القيمة (البيانات لم يتم تحميلها بعد> البيانات) بدلاً من استخدام متغير منطقي منفصل dataLoaded.

ما هو تسلسل اختياري في سويفت؟


تُعرَّف عمليات طلب واستدعاء الخصائص والمشتقات والطرق الخاصة بالاختياري ، والتي قد تكون لها قيمة "لا شيء" ، على أنها سلسلة اختيارية (سلسلة اختيارية) .

إرجاع تسلسل اختياري قيمتين -
  • إذا كان الخيار يحتوي على "قيمة" ، فعندما يتم استدعاء الخصائص والأساليب والمخطوطات المرتبطة بها ، يتم إرجاع القيمة
  • إذا كان اختياري يحتوي على "لا شيء" ، فستعود جميع الخصائص والأساليب والمشتركات المرتبطة به

تسلسل اختياري هو بديل للتفريغ القسري.

ما هو الضغط القسري؟


التفريغ القسري هو وسيلة لاسترداد القيمة الموجودة في اختياري. هذه العملية خطيرة لأنك تخبر المترجم بشكل أساسي: أنا متأكد من أن هذا الخيار يحتوي على قيمة حقيقية ، قم باستخراجه!

 let value: Int? = 1 let newValue: Int = value! //  newValue  1 let anotherOptionalInt: Int? = nil let anotherInt = anotherOptionalInt! // Output:fatal error:  nil    . 

ما هو ضمني فك؟


التفريغ الضمني : عندما نحدد خيارًا غير مفكوك ضمنيًا ، فإننا نحدد الحاوية التي ستفرض التفريغ تلقائيًا في كل مرة نقرأها.

 var name: String! = “Viratlet student = name //       name = nil let player = name //Output:fatal error:  nil    . 

إذا كان الخيار الاختياري الذي تم فك حزمه لا شيء وكنت تحاول الوصول إلى قيمته المعبأة ، فستتلقى خطأ في وقت التشغيل. النتيجة هي نفسها تمامًا كما لو كنت وضعت علامة تعجب بعد العلامة الاختيارية المعتادة ، والتي لا تحتوي على قيمة.

ما هو ملزم اختياري؟


يمكنك فك خيارات بطريقة "آمنة" أو "غير آمنة". طريقة آمنة هي استخدام المجلدات الاختيارية.

يتم استخدام الربط الاختياري لتحديد ما إذا كان اختياري يحتوي على قيمة ، وإذا كان الأمر كذلك ، فسوف نجعل تلك القيمة متاحة كوقت ثابت أو متغير. وبالتالي ، ليست هناك حاجة لاستخدام لاحقة! للوصول إلى قيمتها.

 let possibleString: String? = "Hello" if let actualString = possibleString { //actualString -  ( )   // ,   possibleString print(actualString) } else { //possibleString   ,   // } 

ما هو Guard وما هي فوائده؟


بيان guard بسيط وقوي. يتحقق من بعض الشروط ، وإذا تم تقييمه على أنه خطأ ، يتم تنفيذ العبارة الأخرى ، والتي عادة ما تنهي الطريقة.

 func addStudent(student: [String: String]) { guard let name = student["name"] else { return } print("Added \(name)!") guard let rollNo = student ["rollNo"] else { print("roll No not assigned") return } print("Assigned roll no is \(rollNo).") } addStudent(student: ["name": "Ravi"]) //  "Added Ravi!" //  "roll No not assigned" addStudent(student: ["name": "Ravi", "rollNo": "1"]) //  "Added Ravi!" //  "Assigned roll no is 1" 

ميزة guard هو أسرع التنفيذ . يتم تنفيذ كتلة Guard فقط إذا كانت الحالة خاطئة وسيتم خروج الكتلة من خلال بيان نقل السيطرة مثل return أو break أو thrown أو thrown . هذا يوفر خروج مبكر وعدد أقل من الأقواس. الخروج المبكر يعني تنفيذ أسرع.

يرجى الرجوع إلى هذه المقالة لمزيد من المعلومات.

متى يجب استخدام guard let ، ومتى؟

  • استخدم guard عندما تريد التخلص من الإدخال غير الصحيح / غير الصحيح والتركيز على الهدف إذا كان لديك طرق بديلة للتعامل مع الإدخال.
  • استخدم guard if حظره للحد من التعشيش والمسافة البادئة ، لأنه صغير نسبيًا.

ما هو defer ؟


defer استخدام defer التأجيل لتنفيذ مجموعة من العبارات قبل أن يترك تنفيذ التعليمات البرمجية الكتلة الحالية.

سيتم تنفيذ defer داخل كتلة if أولاً. يتبع ذلك نمط LIFO لتنفيذ عبارات defer المتبقية.

 func doSomething() { defer { print(“1”)} defer { print(“2”)} defer { print(“3”)} if 1<2 { defer { print("1<2")} } defer { print(“4”)} defer { print(“5”)} defer { print(“6”)} }  1<2 6 5 4 3 2 1 

قائمة بالتحكم في نقل مشغلي التي تستخدم في سويفت؟


break - بيان break ينهي تنفيذ بيان تدفق التحكم بالكامل على الفور.

continue - يخبر بيان المتابعة الحلقة أن توقف ما تفعله وأن تبدأ من جديد في بداية التكرار التالي للحلقة.
return - إرجاع القيم من الوظائف.
throw - بحاجة إلى إعادة توجيه خطأ باستخدام وظائف الرمي
fallthrough - fallthrough استخدام بيان fallthrough في كتلة حالة التبديل لتنفيذ بيان الحالة ، والذي يقع بجانب عبارات الحالة المقابلة بناءً على متطلبات المستخدم.

بشكل swift fallthrough استخدام مشغل fallthrough لتنفيذ الحالة التالية ، حتى لو لم يكن مطابقًا للحالة الأصلية.

 let integerToDescribe = 5 var description = “The number \(integerToDescribe) isswitch integerToDescribe { case 2, 3, 5, 7, 11, 13, 17, 19: description += “ a prime number, and also” fallthrough case 10: description += “ case 10.” default: description += “ an integer.” } print(description)// :The number 5 is a prime number, and also case 10. 

نهاية الجزء الثاني. الجزء الأول يمكن قراءته هنا .

نحن في انتظار تعليقاتكم ونذكر أنه في غضون ساعات قليلة ، سيكون هناك يوم مفتوح ، في إطاره سنتحدث بالتفصيل عن مسارنا.

Source: https://habr.com/ru/post/ar452806/


All Articles