المسارات
/
Swift
Swift
/
المنهج
/
معاملات `inout`
مع

معاملات `inout` في Swift

1 تمرين

نبذة عن معاملات `inout`

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

لاستخدام المعاملات الداخلية والخارجية، على المبرمج أن يتأكد من ثلاثة أمور:

  1. يجب أن يحدّد تعريف الدالة المعاملات الداخلية والخارجية صراحةً، بكتابة الكلمة المفتاحية inout بين : واسم النوع في تعليق النوع الخاص بالمعامل.
  2. يجب أن تُعرَّف القيمة التي تُمرَّر إلى المعامل الداخلي والخارجي كمتغير، لا كثابت. وبالمثل، لا يمكن أن تكون قيمة حرفية.
  3. يجب أن يسبق اسم المتغير رمز & عند استدعاء الدالة، لتحديد أنه قابل للتعديل بشكل صريح.

عندما يحدث هذا، ستُنشئ الدالة نسخة داخلية من المعامل الداخلي والخارجي، وتُعدّلها كما هو مطلوب داخل جسم الدالة، ثم تنسخ القيمة المعدّلة مرة أخرى إلى المتغير الذي مُرِّر عند إرجاع الدالة.

func updateVersion(_ record: inout (version: Int, title: String)) {
  record.version += 1
}

var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)

// dbRecord is now (3, "Exercism")
هناك بعض القواعد الإضافية التي ينبغي الانتباه إليها فيما يخص المعاملات الداخلية والخارجية.

1. داخل دالة لها معاملات داخلية وخارجية، لا يُسمح لك بالإشارة إلى المتغير الذي مُرِّر بوصفه المعامل الداخلي والخارجي.
2. لا يمكن تمرير المتغير نفسه كعدة معاملات داخلية وخارجية في الدالة نفسها.
   على سبيل المثال، الاستدعاء `inoutFunc(&mutVar, &mutVar)` يُسبّب خطأً في وقت الترجمة.
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم معاملات `inout`