Swift: استبدال الأحرف في السلسلة النصية — شرح كامل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Swift: كيف تستبدل الأحرف في سلسلة نصية؟ شرح كامل للمبتدئين

\n\n

عاجلاً أم آجلاً، يواجه كل مطور Swift مهمة: استبدال أحرف معينة في سلسلة نصية بأخرى. قد يبدو الأمر بسيطاً، لكن المبتدئين غالباً ما يشعرون بالارتباك لأن Swift String ليست مصفوفة أحرف كما في C، بل هي بنية معقدة متوافقة مع Unicode. في هذه المقالة، سنستعرض أشهر وأكثر الطرق فعالية لاستبدال الأحرف في Swift، من البسيطة إلى المتقدمة.

\n\n

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

\n\n

لماذا Swift String ليست مجرد مصفوفة أحرف؟

\n

قبل تغيير الأحرف، من المهم فهم كيفية عمل السلسلة النصية في Swift. String هي مجموعة من Character، لكن كل Character قد يتكون من عدة وحدات Unicode (مثل الرمز التعبيري 🚀 أو الحرف «ё» مع علامات التشكيل). لذلك، لا يعمل الفهرسة باستخدام Int بشكل مباشر. بدلاً من ذلك، يستخدم Swift String.Index.

\n\n

لكن لاستبدال الأحرف، لست بحاجة للغوص في تفاصيل الفهارس — فهناك طرق جاهزة عالية المستوى. دعنا نلقي نظرة على أشهرها.

\n\n

الطريقة رقم 1: replacingOccurrences — ملك الاستبدال

\n

أبسط وأوضح طريقة هي استخدام الدالة replacingOccurrences(of:with:). تقوم بإرجاع سلسلة نصية جديدة مع استبدال التكرارات. تبقى السلسلة الأصلية دون تغيير (Swift لغة ذات سلاسل نصية غير قابلة للتغيير افتراضياً).

\n\n
let original = "Hello, World!"\nlet replaced = original.replacingOccurrences(of: "World", with: "Swift")\nprint(replaced) // "Hello, Swift!"\nprint(original) // "Hello, World!" — الأصل لم يتغير
\n\n

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

\n\n

سلسلة من الاستدعاءات للاستبدالات المتعددة

\n

يمكنك استدعاء replacingOccurrences عدة مرات متتالية:

\n\n
let text = "Hello, World! How are you?"\nlet cleaned = text\n    .replacingOccurrences(of: ",", with: "")\n    .replacingOccurrences(of: "!", with: "")\n    .replacingOccurrences(of: " ", with: "_")\nprint(cleaned) // "Hello_World_How_are_you?"
\n\n

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

\n\n

الطريقة رقم 2: الاستبدال باستخدام map و filter (المنهج الوظيفي)

\n

Swift ليس فقط برمجة كائنية التوجه، بل أيضاً برمجة وظيفية. يمكنك المرور على كل حرف في السلسلة النصية باستخدام map واستبدالها حسب شرط. هذا مفيد بشكل خاص عندما تحتاج لاستبدال جميع تكرارات مجموعة معينة من الأحرف.

\n\n
let input = "a1b2c3d4"\nlet result = input.map { char -> Character in\n    if char.isNumber {\n        return "X"\n    } else {\n        return char\n    }\n}\nprint(String(result)) // "aXbXcXdX"
\n\n

هنا قمنا باستبدال جميع الأرقام بـ "X". وإذا كنت بحاجة لحذف الأحرف؟ استخدم filter:

\n\n
let withPunctuation = "Hello!!! How are you??"\nlet noPunctuation = withPunctuation.filter { !$0.isPunctuation }\nprint(noPunctuation) // "Hello How are you"
\n\n

هذا المنهج مرن جداً: يمكنك استخدام أي فحوصات — isNumber، isLetter، isWhitespace أو حتى المقارنة مع مجموعة من الأحرف.

\n\n

الطريقة رقم 3: التعبيرات المنتظمة (NSRegularExpression)

\n

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

\n\n
import Foundation\n\nlet text = "My email is test@example.com and your is user@test.org"\nlet regex = try! NSRegularExpression

المدونات

توصيات الكتب