Swift: سلاسل Swift والأحرف: دليل كامل لنوع String
السلاسل النصية هي نوع البيانات الأكثر استخدامًا في التطوير اليومي. يمنحك هذا الدرس جولة كاملة في عمليات String وCharacter في Swift.
1. ما ستتعلمه
- إنشاء ودمج ومقارنة السلاسل النصية
- صياغة إقحام السلاسل والإخر��ج المنسق
- قواعد المسافة البادئة للسلاسل متعددة الأسطر
- نوع Character والتكرار على السلاسل
- طرق السلاسل الشائعة: count، hasPrefix، uppercased، والمزيد
2. قصة حقيقية: أخصائي عمليات العملاء
(1) نقطة الألم: دمج قوالب البريد الإلكتروني يدويًا كان بطيئًا ومعرضًا للأخطاء
Charlie هو أخصائي عمليات العملاء في شركة SaaS، يرسل رسائل بريد إلكتروني مخصصة لأكثر من 2,000 عميل كل أسبوع. بدأ باستخدام علامات الجمع لدمج السلاسل:
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، وأصبح القالب نظيفًا وقابلاً للقراءة:
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، بما في ذلك الرموز التعبيرية:
let greeting = "Hello, Swift!"
let empty = "" // Empty string
let emoji = "🚀" // Unicode support
| طريقة الإنشاء | الصياغة | الوصف |
|---|---|---|
| حرفي | let s = "مرحبًا" |
الأكثر شيوعًا |
| سلسلة فارغة | let s = "" |
سلسلة فارغة |
| مُنشئ | String() |
ينشئ سلسلة فارغة |
| تكرار | String(repeating: "!", count: 3) |
"!!!" |
graph LR
A[إنشاء السل��لة] --> B["حرفي: \"مرحبًا\""]
A --> C["مُنشئ: String()"]
A --> D["تكرار: repeating count"]
A --> E["دمج: +"]
A --> F["إقحام: \\(value)"]
(2) دمج السلاسل النصية
استخدم + أو += لدمج السلاسل، أو طريقة append:
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!
▶ مثال: مُولد عناوين البريد الإلكتروني
// ============================================
// 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) لتضمين أي قيمة في سلسلة:
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 مجموعة غنية من الطرق المضمنة:
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 |
▶ مثال: بطاقة معلومات المستخدم
// ============================================
// 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) السلاسل متعددة الأسطر
استخدم ثلاث علامات اقتباس مزدوجة """ لتغليف المحتوى، مع الحفاظ على فواصل الأسطر والمسافة البادئة:
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!
قواعد المسافة البادئة للسلاسل متعددة الأسطر: موضع """ الختامية يحدد مقدار المسافة البيضاء البادئة التي تُزال من كل سطر:
let indented = """
Line 1
Line 2
"""
// The 4 leading spaces on each line are stripped
| الميزة | سلسلة أحادية السطر | سلسلة متعددة الأسطر |
|---|---|---|
| الصياغة | "..." |
"""...""" |
| فواصل الأسطر | يجب كتابة \n |
فواصل أسطر مباشرة |
| علامات الاقتباس | يجب هروب \" |
يمكن كتابة " مباشرة |
| المسافة البادئة | لا شيء | بناءً على المحدد الختامي |
(2) نوع Character
يمثل Character حرفًا مرئيًا واحدًا (وحدة Unicode). تتكون السلسلة من عدة أحرف:
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 !
▶ مثال: تنسيق النص
// ============================================
// 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. مثال كامل: مولد البريد الإلكتروني للعملاء
// ============================================
// 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 حرف
❓ أسئلة شائعة
""" الختامية تعمل كخط أساس. عدد أحرف المسافة البيضاء قبل المحدد الختامي يُزال من بداية كل سطر محتوى. إذا كان السطر يحتوي على مسافة بادئة أقل من المحدد، لا تُزال أي مسافة بادئة من ذلك السطر.📖 ملخص
- تُنشأ السلاسل بعلامات اقتباس مزدوجة؛ السلاسل الفارغة تستخدم
""أوString() - استخدم
+لدمج السلاسل و+=لإلحاق المحتوى - إقحام السلاسل
\(expression)يضمن أي قيمة في سلسلة - الطرق الشائعة: count، isEmpty، hasPrefix، hasSuffix، uppercased، contains
- السلاسل متعددة الأسطر تستخدم
"""؛ المسافة البادئة تُحدد بموضع المحدد الختامي - Character يمثل حرفًا واحدًا؛ تكرار على String للحصول على كل Character
📝 تمارين
- مبتدئ: استخدم إقحام السلاسل لتوليد الجملة: "اسمي X، عمري Y سنة." خزّن الاسم والعمر في متغيرات.
- متوسط: اكتب برنامجًا للتحقق من عنوان بريد إلكتروني أدخله المستخدم. المتطلبات: يحتوي على
@و.، الطول أكبر من 5، الإخراج بأحرف صغيرة. - متقدم: استخدم سلسلة متعددة الأسطر لتوليد قالب بريد إلكتروني HTML مع رأس وجسم وتذييل، مع تضمين اسم المستخدم واسم المنتج والسعر عبر الإقحام.