تقليم السلاسل النصية في Swift: هل توجد طريقة trim() للـ String؟

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

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

ابدأ الدورة

«أين هو .trim() الخاص بي؟» — أو لماذا Swift ليست Python

\n\n

إذا أتيت إلى Swift من Python أو JavaScript، فمن المؤكد أنك اعتدت على الاستدعاء البسيط " hello ".trim() أو " hello ".strip(). والآن تكتب أول كود لك في Swift، وتحاول فعل نفس الشيء — وتحصل على خطأ في الترجمة. موقف مألوف؟

\n\n

على Stack Overflow، حصد هذا السؤال آلاف المشاهدات، وليس بدون سبب. في Swift لا توجد طريقة .trim() للسلسلة النصية. لكن هذا لا يعني أنه لا يمكنك تقليم المسافات والأحرف. فقط الأسلوب مختلف — بطريقة Swift. دعنا نفهم الأمر مرة واحدة وإلى الأبد.

\n\n

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

\n\n

إجابة مختصرة: نعم، ولكن ليس كما اعتدت

\n\n

في Swift لا توجد طريقة واحدة .trim(). بدلاً من ذلك، يتم استخدام مجموعة من الطرق من البروتوكول Foundation:

\n\n
    \n
  • trimmingCharacters(in:) — الأداة الأساسية
  • \n
  • .trimmingCharacters(in: .whitespacesAndNewlines) — الخيار الأكثر شيوعًا
  • \n
\n\n

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

\n\n

كيف يعمل trimmingCharacters — تحليل بالأمثلة

\n\n

مثال أساسي: إزالة المسافات وفواصل الأسطر

\n\n
import Foundation\n\nlet text = "   مرحباً، Swift!   \\n"\nlet trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines)\nprint(trimmed) // "مرحباً، Swift!"
\n\n

لاحظ: يجب بالضرورة استيراد Foundation. بدونه، الطريقة غير متاحة، لأنها معرفة في NSString، الذي يتم «خلطه» مع سلسلة Swift عبر جسر.

\n\n

المسافات فقط (بدون إزالة فواصل الأسطر)

\n\n
let textWithNewline = "  Hello\\n"\nlet onlySpacesTrimmed = textWithNewline.trimmingCharacters(in: .whitespaces)\nprint(onlySpacesTrimmed) // "Hello\\n"
\n\n

أرأيت؟ بقيت فاصلة السطر. هذا مفيد عندما تريد الحفاظ على التنسيق، ولكن إزالة المسافات الزائدة من الأطراف.

\n\n

تقليم أحرف عشوائية

\n\n

في CharacterSet يمكنك تمرير أي مجموعة:

\n\n
let email = "  user@example.com  "\nlet cleaned = email.trimmingCharacters(in: .whitespaces)\nprint(cleaned) // "user@example.com"\n\nlet price = "$99.99"\nlet noDollar = price.trimmingCharacters(in: CharacterSet(charactersIn: "$"))\nprint(noDollar) // "99.99"
\n\n

ماذا عن trimLeft / trimRight (ltrim / rtrim)؟

\n\n

في Python توجد .lstrip() و .rstrip(). في Swift — لا توجد. لكن من السهل تنفيذها يدويًا. إليك امتدادان بسيطان يمكنك إضافتهما إلى مشروعك:

\n\n
import Foundation\n\nextension String {\n    func trimmingLeft(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n        var start = startIndex\n        while start < endIndex, characterSet.contains(self[start].unicodeScalars.first!) {\n            formIndex(after: &start)\n        }\n        return String(self[start..<endIndex])\n    }\n    \n    func trimmingRight(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n        var end = endIndex\n        while end > startIndex, characterSet.contains(self[index(before: end)].unicodeScalars.first!) {\n            formIndex(before: &end)\n        }\n        return String(self[startIndex..<end])\n    }\n}\n\n// مثال الاستخدام:\nlet text = "   Hello World   "\nprint(text.trimmingLeft())  // "Hello World   "\nprint(text.trimmingRight()) // "   Hello World"
\n\n

الآن لديك trimLeft و trimRight كاملين، كما في Python المفضل لديك. احفظ هذا الكود في ملف منفصل — سيفيدك.

\n\n

ب

المدونات

توصيات الكتب