برمجة الشبكات في Swift: من المقابس إلى WebSocket

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

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

ابدأ الدورة

برمجة الشبكات في Swift: من البسيط إلى المعقد

\n\n

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

\n\n

سأعرض لكم ليس مجرد تعريفات جافة، بل سيناريوهات حقيقية من حياة مطور iOS. ستتعلم كيف يعمل تفاعل الشبكات في Swift على المستوى المنخفض (المقابس) والمستوى العالي (URLSession). وفي النهاية — مكافأة: كيفية توصيل WebSocket لدردشة مباشرة. هيا بنا!

\n\n

فهم الأساسيات: كيف تعمل الشبكات في عالم Swift

\n\n

قبل كتابة الكود، دعنا نفهم المفاهيم. برمجة الشبكات في Swift تستند إلى نفس المبادئ الموجودة في أي لغة أخرى: بنية الخادم والعميل، بروتوكولات TCP/UDP، عناوين IP والمنافذ. لكن هناك فارق — نظام Apple البيئي يقدم أطر العمل الخاصة به التي تجعل حياة المطور أسهل.

\n\n

التقنيات الرئيسية للعمل مع الشبكات في Swift

\n\n
    \n
  • URLSession — الأداة الرئيسية لطلبات HTTP/HTTPS. تعمل مع REST API، تحميل الملفات، المهام الخلفية.
  • \n
  • Network.framework — وصول منخفض المستوى إلى المقابس، TCP/UDP. ظهر في iOS 12، وحل محل CFNetwork القديم.
  • \n
  • WebSocket (URLSessionWebSocketTask) — للاتصال ثنائي الاتجاه في الوقت الفعلي.
  • \n
  • CFStream — طريقة قديمة ولكنها لا تزال حية للعمل مع تدفقات البيانات.
  • \n
\n\n

شخصيًا، أوصي بالبدء بـ URLSession — إنه مثل قيادة سيارة بناقل حركة أوتوماتيكي. وعندما ترغب في "الناقل اليدوي" — انتقل إلى Network.framework.

\n\n

URLSession: صديقك الرئيسي في برمجة الشبكات Swift

\n\n

لنبدأ بالأداة الأكثر شيوعًا. URLSession Swift هو إطار عمل قوي لإرسال واستقبال البيانات عبر الشبكة. يدعم التخزين المؤقت، المصادقة، التحميلات الخلفية وأكثر من ذلك بكثير.

\n\n

طلب GET أساسي

\n\n

تخيل أن تطبيقك يجب أن يعرض قائمة المستخدمين من الخادم. إليك كيف يتم ذلك:

\n\n
import Foundation\n\n// 1. إنشاء URL\nguard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {\n    fatalError("Invalid URL")\n}\n\n// 2. إنشاء مهمة\nlet task = URLSession.shared.dataTask(with: url) { data, response, error in\n    // 3. معالجة الأخطاء\n    if let error = error {\n        print("خطأ: \\(error.localizedDescription)")\n        return\n    }\n    \n    // 4. التحقق من استجابة الخادم\n    guard let httpResponse = response as? HTTPURLResponse,\n          (200...299).contains(httpResponse.statusCode) else {\n        print("رمز حالة غير صحيح")\n        return\n    }\n    \n    // 5. العمل مع البيانات\n    if let data = data {\n        do {\n            let users = try JSONDecoder().decode([User].self, from: data)\n            print("تم استلام \\(users.count) مستخدم")\n        } catch {\n            print("خطأ في التحليل: \\(error)")\n        }\n    }\n}\n\n// 6. تشغيل المهمة\ntask.resume()
\n\n

لاحظ: task.resume() إلزامي! وإلا فلن يتم تنفيذ الطلب أبدًا. هذا خطأ شائع للمبتدئين في برمجة الشبكات في Swift.

\n\n

طلب POST مع جسم

\n\n

الآن سنرسل بيانات إلى الخادم:

\n\n
func createUser(name: String, email: String) {\n    guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {\n        return\n    }\n    \n    var request = URLRequest(url: url)\n    request.httpMethod = "POST"\n    request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n    \n    let body                

المدونات

توصيات الكتب