تحويل مصفوفة Swift إلى سلسلة نصية: دليل كامل للمبتدئين

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

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

ابدأ الدورة

كيفية تحويل Swift Array إلى String؟ برنامج تعليمي كامل مع أمثلة

\n\n

مرحبًا، مطور iOS المستقبلي! إذا كنت قد تساءلت يومًا "How do I convert a Swift Array to a String؟" — فأنت لست وحدك. هذا السؤال حصد آلاف المشاهدات على Stack Overflow، واليوم سنحله نهائيًا. لماذا تحتاج هذا؟ تخيل: أنت تجمع بيانات من نموذج، أو تسجل أخطاء، أو تحضر نصًا للإرسال إلى الخادم. في كل هذه الحالات، تحتاج إلى تحويل المصفوفة إلى سلسلة نصية قابلة للقراءة. هيا بنا!

\n\n

أبسط طريقة: طريقة joined()

\n\n

في Swift، لدمج مصفوفة من السلاسل النصية في سلسلة واحدة، نستخدم طريقة joined(). هذا هو أقصر طريق من المصفوفة إلى السلسلة النصية. ألقِ نظرة على المثال الأساسي:

\n\n
let fruits = ["تفاحة", "موز", "برتقال"]\nlet fruitsString = fruits.joined()\nprint(fruitsString) // الإخراج: "تفاحةموزبرتقال"
\n\n

ومع ذلك، تبدو النتيجة ملتصقة. لجعل السلسلة النصية قابلة للقراءة، استخدم joined(separator:) — الذي يضيف فاصلًا بين العناصر:

\n\n
let fruits = ["تفاحة", "موز", "برتقال"]\nlet fruitsString = fruits.joined(separator: ", ")\nprint(fruitsString) // الإخراج: "تفاحة, موز, برتقال"
\n\n

هام: joined() يعمل فقط مع المصفوفات التي تحتوي على سلاسل نصية ([String]). إذا كان لديك مصفوفة أرقام أو أنواع أخرى، يجب أولاً تحويل كل عنصر.

\n\n

طريقة شاملة: map() + joined()

\n\n

ماذا تفعل إذا كان لديك مصفوفة من الأعداد الصحيحة ([Int])، أو الأعداد العشرية ([Double])، أو، على سبيل المثال، هياكل مخصصة؟ هنا تأتي map() للإنقاذ. هذه الطريقة تحول كل عنصر وفقًا لقاعدة معينة، ثم ندمج النتيجة:

\n\n
let numbers = [1, 2, 3, 4, 5]\nlet numbersString = numbers.map { String($0) }.joined(separator: ", ")\nprint(numbersString) // الإخراج: "1, 2, 3, 4, 5"
\n\n

هنا، map { String($0) } يحول كل رقم إلى سلسلة نصية. بعد ذلك، يسهل دمج مصفوفة السلاسل النصية عبر joined().

\n\n

مثال مع كائنات معقدة

\n\n

لنفترض أن لديك مصفوفة من المستخدمين، وتحتاج إلى الحصول على سلسلة نصية بأسمائهم:

\n\n
struct User {\n    let name: String\n    let age: Int\n}\n\nlet users: [User] = [\n    User(name: "آنا", age: 25),\n    User(name: "بوريس", age: 30),\n    User(name: "فيكتوريا", age: 28)\n]\n\nlet namesString = users.map { $0.name }.joined(separator: ", ")\nprint(namesString) // الإخراج: "آنا, بوريس, فيكتوريا"
\n\n

طريقة متقدمة: reduce(into:)

\n\n

طريقة reduce(into:) هي أداة أكثر مرونة. تتيح لك تجميع سلسلة نصية مع تحكم كامل في العملية. على سبيل المثال، يمكنك إضافة بادئة، لاحقة، أو ترقيم العناصر:

\n\n
let colors = ["أحمر", "أخضر", "أزرق"]\nlet result = colors.reduce(into: "ألواني: ") { (partialResult, color) in\n    partialResult += color + ", "\n}\n// إزالة آخر ", " إذا لزم الأمر\nlet finalString = String(result.dropLast(2))\nprint(finalString) // الإخراج: "ألواني: أحمر, أخضر, أزرق"
\n\n

لاحظ: نحن نزيل آخر حرفين يدويًا (الفاصلة والمسافة). هذا يجعل الكود أقل أناقة من joined()، لكن reduce لا غنى عنه عندما تحتاج إلى منطق تجميع معقد.

\n\n

معالجة القيم الاختيارية (Optionals)

\n\n

في المشاريع الحقيقية، غالبًا ما تحتوي المصفوفات على nil. إذا قمت ببساطة باستدعاء joined()، سيعطي المترجم خطأ. الحل هو تصفية nil باستخدام compactMap():

\n\n
let optionalStrings: [String?] = ["مرحبًا", nil, "العالم", nil, "Swift"]\nlet safeString = optionalStrings.compactMap { $0 }.joined(separator: " ")\nprint(safeString) // الإخراج: "مرحبًا العالم Swift"
\n\n

compactMap { $0 } يتجاهل تلقائيًا جميع قيم nil ويعيد

المدونات

توصيات الكتب