«أين هو .trim() الخاص بي؟» — أو لماذا Swift ليست Python
\n\nإذا أتيت إلى Swift من Python أو JavaScript، فمن المؤكد أنك اعتدت على الاستدعاء البسيط " hello ".trim() أو " hello ".strip(). والآن تكتب أول كود لك في Swift، وتحاول فعل نفس الشيء — وتحصل على خطأ في الترجمة. موقف مألوف؟
على Stack Overflow، حصد هذا السؤال آلاف المشاهدات، وليس بدون سبب. في Swift لا توجد طريقة .trim() للسلسلة النصية. لكن هذا لا يعني أنه لا يمكنك تقليم المسافات والأحرف. فقط الأسلوب مختلف — بطريقة Swift. دعنا نفهم الأمر مرة واحدة وإلى الأبد.
في هذه المقالة، لن نجيب على السؤال الرئيسي فقط، بل سنعرض أيضًا أمثلة كود حقيقية يمكنك إدراجها فورًا في مشروعك. هيا بنا!
\n\nإجابة مختصرة: نعم، ولكن ليس كما اعتدت
\n\nفي Swift لا توجد طريقة واحدة .trim(). بدلاً من ذلك، يتم استخدام مجموعة من الطرق من البروتوكول Foundation:
- \n
trimmingCharacters(in:)— الأداة الأساسية \n .trimmingCharacters(in: .whitespacesAndNewlines)— الخيار الأكثر شيوعًا \n
يبدو هذا غير كافٍ؟ في الواقع، هذا يوفر مرونة: أنت من يقرر أي الأحرف تريد تقليمها، بدلاً من الاعتماد على «السحر» في الطريقة المدمجة.
\n\nكيف يعمل trimmingCharacters — تحليل بالأمثلة
\n\nمثال أساسي: إزالة المسافات وفواصل الأسطر
\n\nimport Foundation\n\nlet text = " مرحباً، Swift! \\n"\nlet trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines)\nprint(trimmed) // "مرحباً، Swift!"\n\nلاحظ: يجب بالضرورة استيراد Foundation. بدونه، الطريقة غير متاحة، لأنها معرفة في NSString، الذي يتم «خلطه» مع سلسلة Swift عبر جسر.
المسافات فقط (بدون إزالة فواصل الأسطر)
\n\nlet textWithNewline = " Hello\\n"\nlet onlySpacesTrimmed = textWithNewline.trimmingCharacters(in: .whitespaces)\nprint(onlySpacesTrimmed) // "Hello\\n"\n\nأرأيت؟ بقيت فاصلة السطر. هذا مفيد عندما تريد الحفاظ على التنسيق، ولكن إزالة المسافات الزائدة من الأطراف.
\n\nتقليم أحرف عشوائية
\n\nفي CharacterSet يمكنك تمرير أي مجموعة:
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 — لا توجد. لكن من السهل تنفيذها يدويًا. إليك امتدادان بسيطان يمكنك إضافتهما إلى مشروعك:
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 المفضل لديك. احفظ هذا الكود في ملف منفصل — سيفيدك.