English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دورات for-in Swift

في هذا المقال، ستتعرف على دورة for-in، ومثال على استخدامها وأشكالها المختلفة.

تستخدم دورة for-in لتشغيل مجموعة من المهام في وقت محدد. تتجول هذه الدورات في أي سلسلة، مثل عناصر في مصفوفة أو نطاق أو حروف في سلسلة.

نستخدم أيضًا دورات for-in لتنفيذ بعض العمليات المتكررة في وقت محدد.

لماذا نحتاج إلى دورات for-in؟

تخيل أن شخصًا ما طلب منك كتابة برنامج يعرض Hello،World على الشاشة! سيكون حلك هو:

print("مرحبًا، عالم!")

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

print("مرحبًا، عالم!")
print("مرحبًا، عالم!")
print("مرحبًا، عالم!")
print("مرحبًا، عالم!")
print("مرحبًا، عالم!")

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

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

لـ i في 1...100 {
	//إخراج Hello World 100 مرة على الشاشة
	print("مرحبًا، عالم!")
}

لا تقلق بشأن النص، سنناقشه أدناه.

نص النطاق for-in

يمكنك إنشاء دائرة for-in في Swift بنحو كما يلي:

لـ <value> في <range> {
	<عمل هنا>
}

تتجه الدائرة أعلاه إلى نطاق، يمكننا الوصول إلى كل عنصر مقدم من هذا النطاق في متغير <value>. إذا لم تكن تعرف النطاقات، يمكنك قراءة المقال التالي:نطاقات Swift

كيف يعمل هذا؟

  • السلسلة التي يتم تكرارها هي <range>.

  • تعيين <value> كرقم الأول في النطاق، ثم تنفيذ الجملة داخل الدائرة < بعض الأعمال هنا >

  • بعد تنفيذ الجملة، يتم تحديث <value> ليكون يحتوي على القيمة الثانية في <range>، ثم تنفيذ الجملة <بعض الأعمال هنا> سيتم تنفيذه مرة أخرى.

  • يستمر هذا العمل حتى وصوله إلى نهاية النطاق وإنهاء الدائرة.

مثال 1: كيف يعمل دائرة for-in في Swift

لـ i في 1...3 {
	print("مرحبًا عالمًا! القيمة هي \(i)")
}

عند تشغيل البرنامج، يتم إخراج النص هو:

مرحبًا عالمًا! القيمة هي 1
مرحبًا عالمًا! القيمة هي 2
مرحبًا عالمًا! القيمة هي 3

في البرنامج أعلاه، نطاق السلسلة التي يجب تكرارها هي من 1 إلى 3.

قيمة i يتم تعيينها كرقم الأول في النطاق (1)، ويتم تحديثها في كل تكرار إلى الرقم التالي في النطاق. هذا يستمر حتى نهاية النطاق (3).

إجراءات داخل الدائرة
التحسين

القيمة التي يتم استردادها من النطاق (i)

الإخراج
11مرحبًا عالمًا! القيمة هي 1
22مرحبًا عالمًا! القيمة هي 2
33مرحبًا عالمًا! القيمة هي 3

تخلص من قيم النطاق في دائرة for-in

إذا لم يستخدم العنصر في الدائرة، يمكنك التخلص منه باستخدام (الخط المائة _) في Swift، مثلما هو موضح أدناه:

لـ _ في <range> {
	<عمل هنا>
}

مثال 2: التخلص من قيم النطاق في دائرة for-in

//تجاهل القيمة هنا واستخدام أداة نطاق مفتوح
لـ _ في 1..<3 {
	print("مرحبًا عالمًا!")
}

عند تشغيل البرنامج، يتم إخراج النص هو:

مرحبًا عالمًا!
مرحبًا عالمًا!

في البرنامج أعلاه، بسبب استخدامأداة نطاق مفتوحإذاً، يجب التحقق من سلسلة الأرقام من 1 إلى 2، بما في ذلك الحد الأدنى (1) ولكن بدون الحد الأعلى (3).

الخط الفاصل _ يتجاهل القيمة في النطاق (1) ويُطبع جملة print. يتم استدعاء جملة print مرة أخرى للتنقل إلى تكرار التالية، ويُنتهي العمل لأن 2 هو آخر قيمة في النطاق.

استخدام خطوات for-in بدون قيمة نطاق
التحسينالقيم التي يتم استردادها من النطاقالإخراج
1تجاهلHello world!
2تجاهلHello world!

استخدام حلقة for-in بفواصل ثابتة

إذا كنت ترغب في أن يزيد التكرار في كل تكرار بقيمة ثابتة (بدلاً من نطاق) فيجب استخدام طريقة stride.

مثال 3: استخدام حلقة for-in مع stride

let interval = 2
for i in stride(from: 1, to: 10, by: interval) {
	print(i)
}

عند تشغيل البرنامج، يتم إخراج النص هو:

1
3
5
7
9

في البرنامج أعلاه، يعود دالة stride إلى سلسلة من الأرقام: 1،3،5،7،9.

قيمة i تُضبط إلى الرقم الأول في السلسلة (1)، ويتم تنفيذ جملة print داخل الحلقة، والتي تُطبع " 1" في وحدة التحكم.

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

استخدام stride للتنفيذ داخل حلقة
القيمةالشرط (القيمة < النهاية)i (الناتج)
11 < 10 (true)1
1 + 2 = 33 < 10 (true)3
1 + 2 * 2 = 55 < 10 (true)5
1 + 3 * 2 = 77 < 10 (true)7
1 + 4 * 2 = 99 < 10 (true)9
1 + 5 * 2 = 1111 < 10 (false)Stops

كيفية الوصول إلى عناصر المجموعات باستخدام حلقة for-in؟

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

let programmingLanguages = ["Swift", "Java", "Go","JavaScript","Kotlin","Python"]

ماذا إذا قال لك شخص ما أن يطبع جميع لغات البرمجة؟

طريقة واحدة هي استخدام قيم المؤشر programmingLanguages[0], programmingLanguages[1]... للوصول إلى هذه العناصر، وهكذا حتى الحصول على جميع العناصر. ولكن هذا ممل للغاية.

لذا، يستخدم التكرار. يمكنك استخدام حلقة for in للتنقل:

مثال 4: استخدام لقوس for-in لزيارة العناصر في القائمة (المجموعة)

let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"]
للقيام بمرور language في programmingLanguages {
      print(language)
}

عند تشغيل البرنامج، يتم إخراج النص هو:

Swift
Java
Go
JavaScript
Kotlin
Python

في البرنامج المذكور أعلاه، هو سلسلة من القوائم التي سيتم مرورها.

سيتم تعيين قيمة language إلى العنصر الأول في القائمة، وسيتم تنفيذ جملة print داخل اللقوس، والتي ستنشر "Swift" في الشاشة.

بعد تنفيذ الجملة، سيتم تحديث قيمة language باستخدام العنصر التالي في القائمة، وسيتم تنفيذ جملة print مرة أخرى. هذا العمل يستمر حتى يتم الوصول إلى العنصر الأخير في القائمة.

مثال 5: استخدام لقوس for-in لزيارة العناصر في النص (المجموعة)

بسبب أن Swiftالنصهي أيضًا مجموعة، لذا يمكنك استخدام لقوس for لزيارة كل حرف في النص.

للقيام بمرور القيمة في "I♥Swift!" {
	print(value)
}

عند تشغيل البرنامج، يتم إخراج النص هو:

I
♥
S
w
i
f
t
!

كيفية استخدام لقوس for-in لزيارة الفهرس في المجموعات؟

إذا كنت ترغب في زيارة الفهرس (موقع العنصر في القائمة، مثل 0،1،2)، فإنك بحاجة إلى استخدام طريقة enumerated:

مثال 6: استخدام لقوس for-in لزيارة الفهرس في القائمة

let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"]
للقيام بمرور (index, language) في programmingLanguages.enumerated() {
      print("\(index):\(language)")
}

عند تشغيل البرنامج، يتم إخراج النص هو:

0:Swift
1:Java
2:Go
3:JavaScript
4:Kotlin
5:Python

في هذا السياق، يعود طريقة التعداد إلى كل عنصر في القائمة كتجميع يتكون من فهرس (Int) وقيمة (String). مثالًا: (0,Swift)،(1,Java)

باستخدام لقوس for-in، يمكنك زيارة هذه العناصر في التجميعات واحدة تلو الأخرى. إذا لم تكن تعرف Tuple (التجميع)، يمكنك ببساطة رؤيته كموقد يمكنه استيعاب قيم من أنواع مختلفة.

كيفية استخدام فقرة where في لقوس for-in لفرز العناصر؟

يمكنك أيضًا استخدامحيثالفقرة ستجري تنفيذ القوس في لقوس for-في

للقيام بمرور القيمة في "I♥Swift!" حيث القيمة != "!" {
	print(value) //إزالة العلامة感叹
}

عند تشغيل البرنامج، يتم إخراج النص هو:

I
♥
S
w
i
f
t

في البرنامج المذكور أعلاه، السلسلة التي يتم تحسينها هي النص (مجموعة من الحروف).

القيمة يتم تعيينها إلى الحرف الأول في النص، ويتم التحقق من الشروط باستخدام شرط where. إذا كان العائد هو true، يتم تنفيذ الكود في الداخل (جملة الطباعة)، والذي يتم إخراجه في الشاشة التحكم كـ“ I”.

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

هذا العمل يستمر حتى الوصول إلى آخر حرف في النص.

إجراء الخطوات لتحسين القيام بتصفية باستخدام دورة for-in
التحسينالقيمةالقيمة != “!”الإخراج
1ItrueI
2true
3StrueS
4wtruew
5itruei
6ftruef
7ttruet
8!false