كيفية تقسيم سلسلة نصية إلى مصفوفة في Swift: دليل كامل مع أمثلة

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر تقسيم السلسلة النصية أساسًا يجب على كل مطور Swift معرفته

\n\n

تخيل موقفًا: تقوم بتحليل ملف CSV، أو معالجة إدخال المستخدم من حقل نصي، أو تحليل سلسلة نصية تشبه JSON. ماذا تفعل؟ صحيح — تقوم بتقسيم السلسلة النصية إلى مصفوفة. سؤال "Split a String into an array in Swift?" على Stack Overflow حصل على أكثر من 20,000 مشاهدة وأصبح من أكثر الأسئلة شيوعًا بين مطوري iOS المبتدئين. لماذا؟ لأنه بدون هذه المهارة لا يمكنك كتابة أي مشروع جاد في Swift.

\n\n

في هذه المقالة، سنستعرض جميع الطرق الممكنة لتقسيم سلسلة نصية إلى مصفوفة في Swift: من الطريقة الكلاسيكية components(separatedBy:) إلى الطريقة الحديثة split(separator:) والحيل الذكية باستخدام التعبيرات المنتظمة. ستتعرف على الطريقة المناسبة حسب المهمة، وستحصل على أمثلة جاهزة للكود يمكنك إدراجها فورًا في مشروع Xcode الخاص بك.

\n\n

1. الطريقة الكلاسيكية: components(separatedBy:)

\n\n

هذه الطريقة جاءت إلينا من Objective-C وما زالت تُستخدم بنشاط. إنها بسيطة وواضحة وتعمل بدقة. components(separatedBy:) تُرجع مصفوفة من السلاسل النصية [String]، مفصولة بالفاصل المحدد.

\n\n
import Foundation\n\nlet text = "تفاحة,موز,برتقال,كيوي"\nlet fruits = text.components(separatedBy: ",")\nprint(fruits) // ["تفاحة", "موز", "برتقال", "كيوي"]
\n\n

ملاحظات هامة حول طريقة components(separatedBy:):

\n
    \n
  • الفاصل هو سلسلة نصية. يمكنك تمرير أي String، حتى لو كان مكونًا من عدة أحرف: "::"، " - ".
  • \n
  • العناصر الفارغة تُحتفظ بها. إذا لم يكن هناك شيء بين الفواصل، ستظهر سلسلة نصية فارغة في المصفوفة.
  • \n
  • يتطلب استيراد Foundation. بدون الاستيراد، الطريقة غير متاحة.
  • \n
\n\n
let data = "a,,b,c"\nlet parts = data.components(separatedBy: ",")\nprint(parts) // ["a", "", "b", "c"]
\n\n

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

\n\n

2. الطريقة الحديثة: split(separator:maxSplits:omittingEmptySubsequences:)

\n\n

بدءًا من Swift 2.0، لدينا الطريقة الأصلية split(). إنها أكثر مرونة و"سويفتية". على عكس components، فإن split تُرجع مصفوفة من Substring، وليس String. تم ذلك لتحسين الأداء — حيث تشير السلاسل النصية الفرعية إلى ذاكرة السلسلة النصية الأصلية.

\n\n
let sentence = "الثعلب البني السريع يقفز فوق الكلب الكسول"\nlet words = sentence.split(separator: " ")\nprint(words) // ["الثعلب", "البني", "السريع", "يقفز", "فوق", "الكلب", "الكسول"]
\n\n

معاملات طريقة split:

\n
    \n
  • separator — حرف الفاصل (Character).
  • \n
  • maxSplits — الحد الأقصى لعدد التقسيمات (الافتراضي Int.max).
  • \n
  • omittingEmptySubsequences — هل يجب إزالة السلاسل النصية الفرعية الفارغة (الافتراضي true).
  • \n
\n\n
let csvLine = "1,2,,4,5"\nlet withEmpties = csvLine.split(separator: ",", omittingEmptySubsequences: false)\nprint(withEmpties) // ["1", "2", "", "4", "5"]\n\nlet withoutEmpties = csvLine.split(separator: ",", omittingEmptySubsequences: true)\nprint(withoutEmpties) // ["1", "2", "4", "5"]
\n\n

إذا كنت بحاجة إلى تقسيم سلسلة نصية إلى مصفوفة من Substring في Swift وتريد التحكم في العناصر الفارغة — اختر split. وللحصول على [String]، أضف ببساطة .map(String.init).

\n\n
let result: [String] = "a,b,c".split(separator: ",").map(String.init)\nprint(result) // ["a", "b", "c"]
\n\n

المدونات

توصيات الكتب