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

دليل Swift الأساسي

المعادلات في Swift

تحكم Swift في التدفق

Swift المجموعات

Swift الوظائف

Swift متقدم

بند guard في Swift

في هذا المقال، ستتعلم كيفية استخدام جملة guard لتحكم في تدفق تنفيذ البرنامج.

جملة If Swiftيصف كيفية تنفيذ عمليات بناءً على شرط معين (قيمة منطقية). في هذا المقال، سنتعلم مزايا جملة guard مقارنة بجملة if لتحكم تدفق البرنامج وكتابة كود بسيط ونظيف.

بند guard في Swift

يستخدم جملة guard بشكل رئيسي لتحويل تحكم البرنامج إلى نطاق خارجي تحت ظروف معينة. تشبه هذه الجملة جملة if القائمة على تنفيذ جملة بناءً على شرط معين (قيمة منطقية)، ولكن على عكس if، تشغل جملة guard فقط عند عدم استيفاء بعض الشروط.

إضافة إلى ذلك، يجب أن يخرج جملة guard من النطاق. لذلك، يجب أن نستخدم جملة تحكم مبرمجة من قبل المستخدم في نهاية جملة guard مثل return أو break أو continue أو throw.

نحو جملة guard

guard expression else {
	//جملة
	//يحتوي على جملة تحكم واحدة: return أو break أو continue أو throw.
}
  • هنا expression هو تعبير منطقي (يعود إلى صحيح أو غير صحيح).

  • إذا تم حساب قيمة expression كغير صحيحة، يتم تنفيذ جملة guard داخل الكود.

  • إذا تم حساب قيمة expression كصحيحة، فإن جملة guard داخل الكود ستمرر من التنفيذ.

كيف تعمل جملة guard؟

ملاحظة: يجب أن تحتوي نهاية جملة guard على جملة تحكم مثل return أو break أو continue أو throw.

مثال 1: كيف تعمل جملة guard؟

جملة guard صحيحة بسيطة كالتالي:

guard صحيح else {
	print("الشرط غير ممكن")
}
print("الشرط ممكن")

عند تشغيل البرنامج، يتم إدخال النتيجة كالتالي:

الشرط ممكن

في البرنامج المذكور أعلاه، يحتوي guard على قيمة منطقية صحيحة (الشرط ممكن). نظرًا لأن جملة guard تعمل فقط عند عدم تحقق الشروط، لذا لن يتم تنفيذ الجملة في الداخل guard. هذا هو السبب في تنفيذ print("الشرط ممكن") وإدخالها في الشاشة.الشرط ممكنالسبب.

الآن، قم بتغيير الشروط إلى غير صحيحة:

مثال 2: يجب أن يخرج جملة guard من النطاق

guard غير صحيح else {
	print("الشرط غير ممكن")
}
print("الشرط ممكن")

في البرنامج المذكور أعلاه،结果是guard غير صحيح. لذا يجب تنفيذ جملة print("Condition not met") في else. ولكن ستحصل على رسالة خطأ:جسم 'guard' لا يمكن أن ينتهي، اعتبارًا من استخدام 'return' أو 'throw' للخروج من النطاق.

رسالة الخطأ تعني أنك بحاجة إلى استخدام جملة return أو break أو continue أو throw لتحويل تحكم البرنامج من جملة guard. الآن سنستخدم return. نظرًا لأن جملة return يمكن استخدامها فقط داخل الدالة، سنقوم بتعليق الكود السابق داخل دالة Swift.

مثال 3: جملة guard في الدالة

يمكننا في Swiftفي الدالةاستخدام جملة guard كما يلي:

func someFunction() {
	guard غير صحيح else {
		print("الشرط غير ممكن")
		return
	}
	print("الشرط ممكن")
}
someFunction()
print("Hello بعد استدعاء الدالة")

عند تشغيل البرنامج أعلاه، الناتج سيكون:

الشرط غير ممكن
Hello بعد استدعاء الدالة

في البرنامج المذكور أعلاه،结果是guard غير صحيح، لذا يتم تنفيذ الجملة في الداخل guard. الجملة الأولى print("الشرط غير ممكن") يتم إدخالها في الشاشة.:条件不满足

并且语句 return 终止函数的执行,同时 print("Hello, after function call") 函数调用执行后的语句在控制台中输出:函数调用后输出 Hello

示例4:带有可选的guard

我们在Swift Optionals中已经看到使用 if-let 来解开一个 Optional。但是,我们也可以使用guard语句代替if-let来展开可选语句,这有一个好处。使用guard而不是if-let展开可选变量的主要优点是,我们可以增加解包变量的作用域。

让我们在下面的示例中看到这一点:

func changeOptionalStringToUpperCase() {
	var name:String?
	guard let temp = name else {
		print("名称为nil。 无法处理")
		return
	}
	print("大写:\(temp.uppercased())")
}
changeOptionalStringToUpperCase()

عند تشغيل البرنامج أعلاه، الناتج سيكون:

名称为nil。 无法处理

在上面的程序中,您可以看到未包装的值temp正在 guard 语句定义的范围之外使用。由于name被定义为可选且包含 nil 值,因此guard语句无法解包该值。

因此,在guard else中执行的语句打印Name为nil。无法在输出中处理,并用 return 语句终止函数。上述 guard 语句 if else 语句的等效代码为:

func changeOptionalStringToUpperCase() {
    
	var name:String?
	if let temp = name {
		print("大写:\(temp.uppercased())")
	} else {
		print("名称为 nil。无法处理")
		return
    }
	//如何在这里访问? 解决方案:使用Guard
}
changeOptionalStringToUpperCase()

注意,上面两个语句都是有效的,并且完成相同的工作。但是使用 if-let 语句时,不能在 if-let 语句之外使用 未包装(unwrapped)值。但是使用守卫语句,您可以通过函数使用 未包装(unwrapped) 值。

实例5:有多个条件的guard

Guard语句还可以链接多个条件,这些条件之间用逗号(,)分隔,如下所示:

func changeOptionalStringToUpperCase() {
	var name:String? = ""
	guard let temp = name , temp.count > 0  else {
		print("名称为nil或空字符串。 无法处理")
		return
	}
	print("Uppercased:\(temp.uppercased())")
}
changeOptionalStringToUpperCase()

عند تشغيل البرنامج أعلاه، الناتج سيكون:

الاسم الذي يكون nil أو خاليًا من الأحرف. لا يمكن معالجته

يحتوي بند الحالة guard في البرنامج أعلاه على شرطين، مفصولين بفاصلة.

الشرط الأول let temp = name يفتح مفتاح الإختيار، في حالتنا، يعود الشرط إلى الحقيقة، والشرط الثاني temp.count > 0 يتحقق من أن النص الذي تم فك التغليف يحتوي على أكثر من حرف، في حالتنا النتيجة هي خطأ.

لذلك، تنفيذ الأنماط في بند guard  print("الاسم الذي يكون nil أو خاليًا من الأحرف. لا يمكن معالجته") ، لا يمكن معالجة الاسم الذي يكون nil أو خاليًا من الأحرف. لا يمكن معالجته في محطة التحكم وينتهي بالبند return.