البرمجة

إلغاء وظائف DispatchQueue في Swift 3

في لغة البرمجة Swift 3، عندما تحتاج إلى تنفيذ وظيفة معينة بعد مرور فترة معينة من الزمن باستخدام DispatchQueue.main.asyncAfter، قد ترغب في إلغاء هذه الوظيفة إذا بدأ المستخدم في الكتابة مرة أخرى قبل انتهاء الفترة المحددة. لتحقيق ذلك، يمكنك استخدام العديد من الطرق، ومنها استخدام متغير لتتبع حالة الكتابة وإلغاء الوظيفة المجدولة إذا بدأ المستخدم في الكتابة مرة أخرى.

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

لنقم بتطبيق الطريقة الأولى، عبر إنشاء متغير Boolean يعبر عن حالة الكتابة. ثم، نقوم بتعيين قيمة هذا المتغير إلى true عندما يبدأ المستخدم في الكتابة، وإلى false عندما ينتهي من الكتابة. بعد ذلك، نستخدم هذا المتغير لإلغاء الوظيفة المجدولة إذا كانت القيمة true.

الآن، دعنا نقم بتطبيق هذا المفهوم في الكود:

swift
// في الجزء العلوي من الفصل var isTyping: Bool = false var scheduledTask: DispatchWorkItem? // داخل الدالة updateSearchResults func updateSearchResults(for searchController: UISearchController) { let searchString: String = searchController.searchBar.text! // قم بإلغاء الوظيفة المجدولة إذا كان المستخدم بدأ في الكتابة مرة أخرى if isTyping { scheduledTask?.cancel() } // حدد متغير isTyping ليعبر عن حالة الكتابة isTyping = true // قم بتعيين الوظيفة المجدولة وتأجيل تنفيذها بعد 0.5 ثانية scheduledTask = DispatchWorkItem { print("1 second has passed! " + searchString) self.isTyping = false } DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: scheduledTask!) }

في هذا الكود، يتم استخدام متغير isTyping لتتبع ما إذا كان المستخدم قد بدأ في الكتابة مرة أخرى أم لا. إذا بدأ المستخدم في الكتابة، يتم إلغاء الوظيفة المجدولة المحددة إذا كانت قد تم تعيينها بالفعل. ثم، يتم تعيين الوظيفة المجدولة الجديدة وتأجيل تنفيذها بعد 0.5 ثانية. عندما يتم تنفيذ الوظيفة المجدولة، يتم تحديث قيمة isTyping للإشارة إلى أن المستخدم انتهى من الكتابة.

هذه الطريقة يمكن أن تكون فعالة لإلغاء وظائف DispatchQueue.main.asyncAfter في Swift 3 عندما يبدأ المستخدم في الكتابة مرة أخرى قبل انتهاء الفترة المحددة.

المزيد من المعلومات

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

تحسينات إضافية:

استخدام النوع DispatchWorkItem:

يمكن تحسين الكود عن طريق استخدام النوع DispatchWorkItem مباشرة بدلاً من إنشاء متغير مؤقت scheduledTask. هذا يسهل التحكم في عملية إلغاء الوظيفة المجدولة.

swift
var typingWorkItem: DispatchWorkItem? // داخل الدالة updateSearchResults func updateSearchResults(for searchController: UISearchController) { let searchString: String = searchController.searchBar.text! // إلغاء الوظيفة المجدولة إذا بدأ المستخدم في الكتابة مرة أخرى typingWorkItem?.cancel() // تعيين الوظيفة المجدولة وتأجيل تنفيذها بعد 0.5 ثانية typingWorkItem = DispatchWorkItem { print("1 second has passed! " + searchString) } DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: typingWorkItem!) }

إدارة الحالة بشكل أفضل:

يمكنك تحسين إدارة حالة الكتابة بتضمين المتغير isTyping في الدالة updateSearchResults نفسها.

swift
// داخل الدالة updateSearchResults func updateSearchResults(for searchController: UISearchController) { let searchString: String = searchController.searchBar.text! // تحديث حالة الكتابة let isTyping = !searchString.isEmpty // إلغاء الوظيفة المجدولة إذا كان المستخدم قد بدأ في الكتابة مرة أخرى typingWorkItem?.cancel() // تعيين الوظيفة المجدولة وتأجيل تنفيذها بعد 0.5 ثانية إذا كان المستخدم غير متوقف عن الكتابة if isTyping { typingWorkItem = DispatchWorkItem { print("1 second has passed! " + searchString) } DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: typingWorkItem!) } }

هذا التحسين يسمح بتبسيط الكود وإدارة حالة الكتابة بشكل أفضل بمجرد استخدام قيمة searchString.

ختاماً:

في هذا المقال، قمنا بشرح كيفية إلغاء وظائف DispatchQueue.main.asyncAfter في Swift 3 عند بدء المستخدم في الكتابة مرة أخرى قبل انتهاء الفترة المحددة. استخدمنا متغير Boolean لتتبع حالة الكتابة وDispatchWorkItem لتنفيذ الوظيفة المجدولة، وقدمنا بعض التحسينات لجعل الكود أكثر فعالية وإدارة لحالة الكتابة بشكل أفضل. تطبيق هذه الأفكار يساعد في إنشاء تجربة مستخدم أكثر سلاسة عند التفاعل مع التطبيقات التي تتطلب استجابة فورية لإدخالات المستخدم.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر