Swift: الشروط في Swift: دليل كامل لجملتي if-else وswitch

آخر تحديث: 2026-08-26

الشروط تجعل برنامجك يتفاعل بشكل مختلف مع المواقف المختلفة، تمامًا مثل إشارة المرور التي تغير الإشارات بناءً على حركة المرور. يغطي هذا الدرس جميع آليات التحكم الشرطية في Swift: if-else وswitch والمزيد.

1. ما ستتعلمه


2. قصة حقيقية: مطور خلفي

(1) نقطة الألم: صلاحيات الأدوار متعددة المستويات حولت الكود إلى سباغيتي

Bob يبني نظام صلاحيات المستخدم في شركة SaaS. النظام لديه 5 أدوار مستخدم (مدير / محرر / مشاهد / ضيف / محظور)، لكل منها مستويات وصول مختلفة إلى أكثر من 20 نقطة نهاية API. ��ستخدم Bob في البداية 15 مستوى من if-else المتداخلة:

SWIFT
if role == "admin" {
    if action == "delete" {
        // allow
    } else if action == "edit" {
        // allow
    }
} else if role == "editor" {
    // 700 lines of repeated code...
}

تضخم الكود سريعًا إلى أكثر من 700 سطر. إضافة دور جديد يعني تعديل 5 أماكن مختلفة. قضى Bob أسبوعًا كاملاً في إصلاح ثغرة أمنية ناتجة عن ترتيب if-else غير صحيح.

(2) الحل: switch

أعاد Bob هيكلة نظام الصلاحيات باستخدام جمل switch:

SWIFT
let role = "editor"
switch role {
case "admin":
    print("Full access granted")
case "editor":
    print("Read and write access")
case "viewer", "guest":
    print("Read-only access")
case "banned":
    print("Access denied")
default:
    print("Unknown role")
}

(3) النتيجة: تقلص الكود 80%، أصبح المنطق واضحًا تمامًا

البُعد 15 مستوى if-else بعد إعادة الهيكلة بـ switch
عدد الأسطر 700+ 150
وقت إضافة دور جديد 30 دقيقة 3 دقائق
أخطاء المنطق 3 شهريًا 0 شهريًا
درجة قابلية القراءة 3/10 9/10

3. جمل if/else الشرطية

if/else هي بنية التحكم الشرطية الأساسية في Swift. تقرر أي كتلة كود تنفذ بناءً على قيمة Bool.

100%
graph TB
    A[الشرط] -->|true| B[كتلة if]
    A -->|false| C[كتلة else if / else]
    B --> D[متابعة]
    C --> D
الصياغة الوصف مثال
if condition { } تنفذ عندما يكون الشرط true if score >= 60 { }
if ... else { } تنفذ else عن��ما يكون الشرط false if ... else { }
if ... else if ... else { } فحص شروط متعددة بالترتيب if ... else if ... else { }

(1) if وelse الأساسيتان

SWIFT
let temperature = 30
if temperature > 25 {
    print("It's hot outside")
} else {
    print("It's cool outside")
}

(2) شروط متعددة مع else if

SWIFT
let score = 85
if score >= 90 {
    print("Grade: A")
} else if score >= 80 {
    print("Grade: B")
} else if score >= 70 {
    print("Grade: C")
} else if score >= 60 {
    print("Grade: D")
} else {
    print("Grade: F")
}

▶ مثال: فحص حالة تسجيل الدخول

SWIFT
// ============================================
// Display different messages based on login status
// ============================================
let isLoggedIn = true
let hasProfile = false
if isLoggedIn {
    print("Welcome back!")
    if hasProfile {
        print("Your profile is complete")
    } else {
        print("Please complete your profile")
    }
} else {
    print("Please log in first")
}

المخرجات:

TEXT 📖 للعرض فقط
Welcome back!
Please complete your profile

4. switch للتفرع المتعدد

switch هي أداة تفرع متعدد أقوى من if-else. switch في Swift لا تتطلب break — ينتهي التنفيذ تلقائيًا بعد المطابقة.

100%
graph TB
    A[القيمة] --> B[case 1]
    A --> C[case 2]
    A --> D[case 3]
    A --> E[default]
    B --> F[تنفيذ وخروج]
    C --> F
    D --> F
    E --> F
الميزة switch في Swift switch في C/Java
break الضمني تلقائي (لا حاجة لـ break) يجب كتابة break
مطابقة النطاق تدعم ... و..< غير مدعومة
المطابقة المركبة قيم مفصولة بفواصل تعتمد على fallthrough
الشمولية يجب تغطية جميع الاحتمالات غير مفروضة
فرع default يستخدم default يستخدم default

(1) صياغة switch الأساسية

SWIFT
let fruit = "apple"
switch fruit {
case "apple":
    print("It's an apple")
case "banana":
    print("It's a banana")
case "orange":
    print("It's an orange")
default:
    print("Unknown fruit")
}

(2) مطابقة النطاق والمطابقة المركبة

SWIFT
let age = 25
switch age {
case 0..<13:
    print("Child")
case 13..<20:
    print("Teenager")
case 20..<65:
    print("Adult")
case 65...:
    print("Senior")
default:
    print("Invalid age")
}

▶ مثال: معالجة رموز حالة HTTP

SWIFT
// ============================================
// Handle HTTP response status codes with switch
// ============================================
let statusCode = 404
switch statusCode {
case 100..<200:
    print("Informational")
case 200..<300:
    print("Success")
case 300..<400:
    print("Redirection")
case 400..<500:
    print("Client error")
    if statusCode == 404 {
        print("Resource not found")
    }
case 500..<600:
    print("Server error")
default:
    print("Unknown status code")
}

المخرجات:

TEXT 📖 للعرض فقط
Client error
Resource not found

5. التحكم المتقدم: fallthrough وwhere والعامل الثلاثي

توفر Swift أدوات إضافية لجعل المنطق الشرطي أكثر مرونة.

الأداة الغرض مثال
fallthrough الانتقال إلى الحالة التالية في switch case "a": fallthrough
where إضافة تصفية إضافية لشرط case let x where x > 10:
الثلاثي ? : اختيار موجز إما/أو let max = a > b ? a : b

(1) fallthrough

SWIFT
let number = 2
switch number {
case 1:
    print("One")
case 2:
    print("Two")
    fallthrough
case 3:
    print("Three or fell through from two")
default:
    print("Other")
}

(2) تصفية الشرط بـ where

SWIFT
let point = (x: 3, y: 4)
switch point {
case let (x, y) where x == y:
    print("On the diagonal")
case let (x, y) where x > y:
    print("X is larger")
case let (x, y) where x < y:
    print("Y is larger")
default:
    print("On an axis")
}

(3) العامل الشرطي الثلاثي

SWIFT
let isMember = true
let discount = isMember ? 0.2 : 0.0
print("Discount: \(discount * 100)%")

▶ مثال: حاسبة خصم الطلب

SWIFT
// ============================================
// Combine if/switch/ternary to calculate order discounts
// ============================================
let orderTotal = 250.0
let customerTier = "gold"
// Ternary operator: base discount
let baseDiscount = orderTotal > 100 ? 0.05 : 0.0
// switch: membership tier discount
let tierDiscount: Double
switch customerTier {
case "platinum":
    tierDiscount = 0.20
case "gold":
    tierDiscount = 0.15
case "silver":
    tierDiscount = 0.10
default:
    tierDiscount = 0.0
}
// if: cap the combined discount
let totalDiscount = baseDiscount + tierDiscount
let finalDiscount = totalDiscount > 0.3 ? 0.3 : totalDiscount
let finalPrice = orderTotal * (1 - finalDiscount)
print("Order total: $\(orderTotal)")
print("Tier: \(customerTier)")
print("Discount: \(Int(finalDiscount * 100))%")
print("Final price: $\(finalPrice)")

المخرجات:

TEXT 📖 للعرض فقط
Order total: $250.0
Tier: gold
Discount: 20%
Final price: $200.0

6. مثال كامل: نظام إدارة صلاحيات المستخدم

SWIFT
// ============================================
// User permission management system
// Integrates if/switch/where/ternary operators
// ============================================
import Foundation
enum UserRole {
    case admin, editor, viewer, guest, banned
}
enum ActionResult {
    case granted, denied(String)
}
func checkPermission(role: UserRole, action: String, isOwner: Bool) -> ActionResult {
    switch role {
    case .banned:
        return .denied("Account is banned")
    case .admin:
        return .granted
    case .editor:
        if action == "delete" && !isOwner {
            return .denied("Only owners can delete")
        }
        return .granted
    case .viewer:
        switch (action, isOwner) {
        case (_, false):
            return .denied("Viewers cannot modify content")
        case ("read", true):
            return .granted
        default:
            return .denied("Unknown action")
        }
    case .guest:
        return action == "read" ? .granted : .denied("Guests can only read")
    }
}
let testCases = [
    (UserRole.admin, "delete", false),
    (UserRole.editor, "delete", true),
    (UserRole.editor, "delete", false),
    (UserRole.viewer, "read", true),
    (UserRole.viewer, "write", false),
    (UserRole.guest, "read", false),
    (UserRole.banned, "read", false)
]
for (role, action, isOwner) in testCases {
    let result = checkPermission(role: role, action: action, isOwner: isOwner)
    switch result {
    case .granted:
        print("[GRANTED] \(role) can \(action)")
    case .denied(let reason):
        print("[DENIED] \(role) cannot \(action) -- \(reason)")
    }
}
> المخرجات:
> ```text
> [GRANTED] admin can delete
> [GRANTED] editor can delete
> [DENIED] editor cannot delete -- Only owners can delete
> [GRANTED] viewer can read
> [DENIED] viewer cannot write -- Viewers cannot modify content
> [GRANTED] guest can read
> [DENIED] banned cannot read -- Account is banned
> ```
---
## ❓ أسئلة شائعة
> **س: لماذا لا تحتاج switch في Swift إلى break؟** **ج: switch في Swift تخرج تلقائيًا بعد مطابقة حالة ولن تسقط إلى الحالة التالية. للسقوط المقصود، يجب كتابة fallthrough صراحة.**
> **��: كيف أختار بين if وswitch؟** **ج: استخدم `if` لـ 2-3 فروع. استخدم `switch` عندما يكون لديك أكثر من 3 فروع أو تحتاج مطابقة نطاق/نمط. تفرض switch معالجة شاملة لجميع الاحتما��ات، مما يجعلها أكثر أمانًا من if.**
> **س: ما الفرق بين `...` و`..<`؟** **ج: `a...b` يتضمن كل من a وb (نطاق مغلق). `a..<b` يتضمن a لكن ليس b (نطاق نصف مفتوح). مثلاً، `1...3` يتضمن 1، 2، 3؛ `1..<3` يتضمن 1، 2.**
> **س: هل العامل الثلاثي يضر بقابلية قراءة الكود؟** **ج: للاختيارات البسيطة إما/أو (مثل التعيينات)، الثلاثي واضح وموجز. عند تداخل العوامل الثلاثية أو عندما يصبح المنطق معقدًا، استخدم `if` بدلاً من ذلك — السطر الواحد الطويل يصبح أصعب قراءة.**
> **��: هل يمكن حذف فرع default؟** **ج: لا. يجب أن تكون switch في Swift شاملة. إذا غطيت جميع الحالات (مثلاً جميع حالات تعداد)، يمكنك حذف default.**
---
## 📖 ملخص
- if/else هي أكثر تحكم شرطي أساسي، الأفضل لـ 2-3 فروع
- switch هي الأفضل لـ 3+ فروع وتدعم مطابقة النطاق والمطابقة المر��بة وربط القيم
- fallthrough في switch يسمح بالسقوط إلى الحالة التالية، مفيد لسيناريوهات المطابقة المتسلسلة
- عبارة where تضيف شروط تصفية إضافية لحالات switch وحلقات for
- العامل الثلاثي ? : هو الأفضل للتعيينات الموجزة إما/أو
- switch في Swift تتطلب معالجة شاملة، مما يعزز أمان الكود
---
## 📝 تمارين
1. **مبتدئ:** استخدم if/else لكتابة مصنف درجة حرارة الجسم: temp < 36.0 يخرج "منخفضة"، 36.0...37.5 يخرج "طبيعية"، > 37.5 يخرج "حمى".
2. **متوسط:** أعد هيكلة تمرين المبتدئ باستخدام switch لدعم أيضًا temp < 35.0 يخرج "منخفضة بشكل خطير". استخدم صياغة مطابقة النطاق.
3. **متقدم:** أنشئ حاسبة رسوم دفع. قواعد الرسوم: بطاقة ائتمان 2.5% (≥$100: 2.5% - 0.5%)، بطاقة خصم 1.0% (سقف $5)، PayPal 3.0% + $0.30. نفذ بـ switch + where.
Web-Tutorial.com

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

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

100%