Swift: سلاسل Swift والأحرف: دليل كامل لنوع String

السلاسل النصية هي نوع البيانات الأكثر استخدامًا في التطوير اليومي. يمنحك هذا الدرس جولة كاملة في عمليات String وCharacter في Swift.

1. ما ستتعلمه


2. قصة حقيقية: أخصائي عمليات العملاء

(1) نقطة الألم: دمج قوالب البريد الإلكتروني يدويًا كان بطيئًا ومعرضًا للأخطاء

Charlie هو أخصائي عمليات العملاء في شركة SaaS، يرسل رسائل بريد إلكتروني مخصصة لأكثر من 2,000 عميل كل أسبوع. بدأ باستخدام علامات الجمع لدمج السلاسل:

SWIFT
let firstName = "Alice"
let lastName = "Johnson"
let product = "Premium Plan"
let price = "299.00"
let email = "Dear " + firstName + " " + lastName + ",\n\nThank you for purchasing " + product + "!\nYour payment: $" + price + ".\n\nBest regards,\nCharlie"

كان الكود طويلاً وصعب الصيانة. أي تغيير في تنسيق القالب يعني إعادة كتابته بالكامل. الأسبوع الماضي أرسل بطريق الخطأ "عزيزي AliceJohnson" (ناقص مسافة) إلى أكثر من 300 عميل.

(2) الحل: إقحام السلاسل النصية

تحول Charlie إلى صياغة إقحام السلاسل في Swift، وأصبح القالب نظيفًا وقابلاً للقراءة:

SWIFT
let firstName = "Alice"
let lastName = "Johnson"
let product = "Premium Plan"
let price = "299.00"
let email = """
Dear \(firstName) \(lastName),

Thank you for purchasing \(product)!
Your payment: $\(price).

Best regards,
Charlie
"""
print(email)

المخرجات:

TEXT 📖 للعرض فقط
عزيزي Alice Johnson،

شكرًا لشرائك الخطة المميزة!
دفعتك: $299.00.

مع أطيب التحيات،
Charlie

(3) النتيجة: تحسنت قابلية صيانة كود القالب

البُعد قبل (الدمج) بعد (الإقحام)
الكود لكل بريد 8 أسطر دمج + هروب 4 أسطر إقحام
وقت تحرير القالب 5-10 دقائق 30 ثانية
معدل الخطأ 3-5 شهريًا 0
قابلية القراءة رموز مختلطة، صعب التدقيق تقريبًا نص عادي

3. إنشاء ودمج السلاسل النصية

نوع String في Swift قوي ويوفر طرقًا متعددة لإنشاء ومعالجة السلا��ل.

(1) نصوص السلاسل الحرفية

أنشئ السلاسل بتغليف النص بعلامات اقتباس مزدوجة. تدعم Swift Unicode، بما في ذلك الرموز التعبيرية:

SWIFT
let greeting = "Hello, Swift!"
let empty = ""           // Empty string
let emoji = "🚀"         // Unicode support
طريقة الإنشاء الصياغة الوصف
حرفي let s = "مرحبًا" الأكثر شيوعًا
سلسلة فارغة let s = "" سلسلة فارغة
مُنشئ String() ينشئ سلسلة فارغة
تكرار String(repeating: "!", count: 3) "!!!"
100%
graph LR
    A[إنشاء السل��لة] --> B["حرفي: \"مرحبًا\""]
    A --> C["مُنشئ: String()"]
    A --> D["تكرار: repeating count"]
    A --> E["دمج: +"]
    A --> F["إقحام: \\(value)"]

(2) دمج السلاسل النصية

استخدم + أو += لدمج السلاسل، أو طريقة append:

SWIFT
let firstName = "Alice"
let lastName = "Johnson"
// Using + for concatenation
let fullName = firstName + " " + lastName
print(fullName)  // Alice Johnson
// Using += to append
var message = "Hello"
message += ", "
message += firstName
print(message)  // Hello, Alice
// Using the append method
var greeting2 = "Welcome"
greeting2.append("!")
print(greeting2)  // Welcome!

▶ مثال: مُولد عناوين البريد الإلكتروني

SWIFT
// ============================================
// Generate email addresses from user info
// Demonstrates string creation and concatenation
// ============================================
let domain = "@example.com"
let alice = "alice.johnson"
let bob = "bob.smith"
let charlie = "charlie.brown"
let email1 = alice + domain
let email2 = bob + domain
let email3 = charlie + domain
print(email1)
print(email2)
print(email3)
// Build a full URL
let scheme = "https://"
let site = "api."
let fullURL = scheme + site + domain
print("API URL: \(fullURL)")

المخرجات:

TEXT 📖 للعرض فقط
alice.johnson@example.com
bob.smith@example.com
charlie.brown@example.com
API URL: https://api.example.com

4. إقحام السلاسل والطرق الشائعة

إقحام السلاسل هو أحد أقوى ميزات السلاسل في Swift، مما يسمح لك بتضمين المتغيرات والتعابير وحتى استدعاءات الدوال مباشرة في السلاسل.

(1) إقحام السلاسل النصية

استخدم صياغة \(expression) لتضمين أي قيمة في سلسلة:

SWIFT
let name = "Alice"
let age = 28
let height = 1.75
let intro = "My name is \(name), I am \(age) years old and \(height) meters tall."
print(intro)
// My name is Alice, I am 28 years old and 1.75 meters tall.
// Expressions inside interpolation
let price = 29.99
let qty = 3
let summary = "Total: $\(price * Double(qty))"
print(summary)
// Total: $89.97
محتوى الإقحام الصياغة النتيجة
متغير \(name) قيمة المتغير
تعبير \(price * 0.9) النتيجة المحسوبة
استدعاء طريقة \(name.uppercased()) قيمة الإرجاع للطريقة
قيم متعددة \(a) + \(b) = \(a + b) مضمنة واحدة تلو الأخرى

(2) طرق السلاسل الشائعة

توفر String في Swift مجموعة غنية من الطرق المضمنة:

SWIFT
let text = "Hello, Swift!"
text.count                     // 13 (character count)
text.isEmpty                   // false
text.hasPrefix("Hello")        // true
text.hasSuffix("Swift!")       // true
text.uppercased()              // "HELLO, SWIFT!"
text.lowercased()              // "hello, swift!"
text.contains("Swift")         // true
الطريقة ما تفعله مثال النتيجة
count عدد الأحرف "مرحبًا".count 5
isEmpty هل هي فارغة "".isEmpty true
hasPrefix هل تبدأ ببادئة "Swift".hasPrefix("Sw") true
hasSuffix هل تنتهي بلاحقة "Swift".hasSuffix("ft") true
uppercased تحويل إلى أحرف كبيرة "Swift".uppercased() "SWIFT"
lowercased تحويل إلى أحرف صغيرة "Swift".lowercased() "swift"
contains هل تحتوي على سلسلة فرعية "مرحبًا".contains("حب") true

▶ مثال: بطاقة معلومات المستخدم

SWIFT
// ============================================
// Generate a formatted user info card
// Demonstrates string interpolation and common methods
// ============================================
let firstName = "Alice"
let lastName = "Johnson"
let email = "alice.johnson@example.com"
let role = "Admin"
// Use interpolation to combine info
let displayName = "\(firstName) \(lastName)"
let emailDomain = email.contains("@") ? email.split(separator: "@")[1] : "unknown"
// Validate format
let isValidEmail = email.contains(".") && email.contains("@")
let isAdmin = role.uppercased() == "ADMIN"
print("=== User Card ===")
print("Name: \(displayName)")
print("Email: \(email)")
print("Domain: \(emailDomain)")
print("Valid Email: \(isValidEmail)")
print("Admin: \(isAdmin)")
print("Name Length: \(displayName.count) chars")

المخرجات:

TEXT 📖 للعرض فقط
=== User Card ===
Name: Alice Johnson
Email: alice.johnson@example.com
Domain: example.com
Valid Email: true
Admin: true
Name Length: 13 chars

5. السلاسل متعددة الأسطر وCharacter

توفر Swift صياغة علامات الاقتباس الثلاثية للسلاسل متعددة الأسطر، ونوع Character يم��ل حرفًا واحدًا.

(1) السلاسل متعددة الأسطر

استخدم ثلاث علامات اقتباس مزدوجة """ لتغليف المحتوى، مع الحفاظ على فواصل الأسطر والمسافة البادئة:

SWIFT
let poem = """
Roses are red,
Violets are blue,
Swift is awesome,
And so are you!
"""
print(poem)

المخرجات:

TEXT 📖 للعرض فقط
Roses are red,
Violets are blue,
Swift is awesome,
And so are you!

قواعد المسافة البادئة للسلاسل متعددة الأسطر: موضع """ الختامية يحدد مقدار المسافة البيضاء البادئة التي تُزال من كل سطر:

SWIFT
let indented = """
    Line 1
    Line 2
    """
// The 4 leading spaces on each line are stripped
الميزة سلسلة أحادية السطر سلسلة متعددة الأسطر
الصياغة "..." """..."""
فواصل الأسطر يجب كتابة \n فواصل أسطر مباشرة
علامات الاقتباس يجب هروب \" يمكن كتابة " مباشرة
المسافة البادئة لا شيء بناءً على المحدد الختامي

(2) نوع Character

يمثل Character حرفًا مرئيًا واحدًا (وحدة Unicode). تتكون السلسلة من عدة أحرف:

SWIFT
let ch: Character = "A"
let emoji: Character = "🌟"
// Iterate over each character in a string
let greeting = "Hi!"
for char in greeting {
    print(char)
}
// Output: H  i  !

▶ مثال: تنسيق النص

SWIFT
// ============================================
// Generate a formatted product description
// Demonstrates multiline strings and Character iteration
// ============================================
let productName = "Swift Pro"
let version = "2.0"
let features = ["Fast", "Safe", "Modern", "Open Source"]
// Use a multiline string to build the product description
let description = """
Product: \(productName)
Version: \(version)
Features:
  - \(features[0])
  - \(features[1])
  - \(features[2])
  - \(features[3])
"""
print(description)
// Iterate over each character in the product name
print("Product name characters:")
for ch in productName {
    print("[\(ch)]", terminator: " ")
}
print()

المخرجات:

TEXT 📖 للعرض فقط
Product: Swift Pro
Version: 2.0
Features:
  - Fast
  - Safe
  - Modern
  - Open Source
Product name characters:
[S] [w] [i] [f] [t] [ ] [P] [r] [o]

6. مثال كامل: مولد البريد الإلكتروني للعملاء

SWIFT
// ============================================
// Customer email generator
// Demonstrates concatenation, interpolation, multiline, and methods
// ============================================
import Foundation
// 1. Customer data
let customerName = "Charlie Brown"
let projectName = "DataSync Pro"
let dueDate = "2026-08-15"
let amount = 2499.00
// 2. Email subject
let subject = "Invoice for \(projectName) - Due \(dueDate)"
print("Subject: \(subject)")
print(String(repeating: "=", count: subject.count + 10))
// 3. Email body (multiline string + interpolation)
let body = """
Dear \(customerName),

Thank you for choosing \(projectName).

Invoice Summary:
  - Project: \(projectName)
  - Amount: $\(String(format: "%.2f", amount))
  - Due Date: \(dueDate)

Please make the payment by \(dueDate).
If you have any questions, feel free to reply.

Best regards,
Swift Tech Team
"""
print(body)
// 4. Email validation
let isValidSubject = subject.hasPrefix("Invoice")
let containsProjectName = body.contains(projectName)
let isFormatted = body.hasSuffix("Team\n")
print("=== Validation ===")
print("Valid Subject: \(isValidSubject)")
print("Contains Project: \(containsProjectName)")
print("Proper Formatting: \(isFormatted)")
print("Body Length: \(body.count) chars")

المخرجات:

TEXT 📖 للعرض فقط
الموضوع: فاتورة DataSync Pro - تستحق 2026-08-15
==============================================
عزيزي Charlie Brown،

شكرًا لاختيارك DataSync Pro.

ملخص الفاتورة:
  - المشروع: DataSync Pro
  - المبلغ: $2499.00
  - تاريخ الاستحقاق: 2026-08-15

يرجى إجراء الدفع بحلول 2026-08-15.
إذا كان لديك أي أسئلة، لا تتردد في الرد.

مع أطيب التحيات،
فريق Swift التقني

=== التحقق ===
موضوع صالح: true
يحتوي المشروع: true
تنسيق سليم: true
طول الجسم: 278 حرف

❓ أسئلة شائعة

س أيهما أسرع، إقحام السلاسل أم الدمج بعلامة الجمع؟
ج الإقحام له أداء أفضل قليلاً. يحسن المترجم الإقحام إلى استدعاءات append داخليًا، بينما تنشئ عمليات الدمج المتعددة سلاسل وسيطة. في التطوير اليومي الفرق ضئيل — أعط الأولوية لقابلية القراءة.
س كيف تُحسب المسافة البادئة في السلاسل متعددة الأسطر؟
ج """ الختامية تعمل كخط أساس. عدد أحرف المسافة البيضاء قبل المحدد الختامي يُزال من بداية كل سطر محتوى. إذا كان السطر يحتوي على مسافة بادئة أقل من المحدد، لا تُزال أي مسافة بادئة من ذلك السطر.
س ما الفرق بين Character وString؟
ج Character يمثل حرفًا مرئيًا واحدًا (وحدة Unicode)، بينما String هي مجموعة من عدة أحرف. يمكن أن تتكون String من 0 إلى عدة أحرف.
س هل String في Swift نوع قيمة أم نوع مرجعي؟
ج String هي نوع قيمة (struct). كل تعيين أو تمرير وسيط ينشئ نسخة، لكن Swift تستخدم تحسين النسخ عند الكتابة لذلك لا تنسخ فعليًا إلا عند حدوث تغيير، مما يبقي العبء الزائد عند الحد الأدنى.

📖 ملخص


📝 تمارين

  1. مبتدئ: استخدم إقحام السلاسل لتوليد الجملة: "اسمي X، عمري Y سنة." خزّن الاسم والعمر في متغيرات.
  2. متوسط: اكتب برنامجًا للتحقق من عنوان بريد إلكتروني أدخله المستخدم. المتطلبات: يحتوي على @ و .، الطول أكبر من 5، الإخراج بأحرف صغيرة.
  3. متقدم: استخدم سلسلة متعددة الأسطر لتوليد قالب بريد إلكتروني HTML مع رأس وجسم وتذييل، مع تضمين اسم المستخدم واسم المنتج والسعر عبر الإقحام.
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%