0Pricing
Swift Academy · درس

‏UIViewRepresentable: تغليف عروض UIKit

نفّذوا makeUIView وupdateUIView وفكّكوا عروض UIKit في SwiftUI.

‏UIViewRepresentable: تغليف عروض UIKit درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

لماذا UIViewRepresentable؟

لا تملك العديد من عروض UIKit بديلًا مكافئًا في SwiftUI حتى الآن. يعمل UIViewRepresentable كجسر لدمج عروض UIKit في SwiftUI.

import SwiftUI
import UIKit

struct WebView: UIViewRepresentable {
  let url: URL
  // ...
}

الأساليب المطلوبة

طبّق makeUIView لإنشاء العرض وupdateUIView لمزامنة تغييرات حالة SwiftUI.

func makeUIView(context: Context) -> WKWebView {
  WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
  uiView.load(URLRequest(url: url))
}

مثال كامل على WebView

مثال كامل على UIViewRepresentable يغلّف WKWebView لعرض محتوى الويب في SwiftUI.

struct WebView: UIViewRepresentable {
  let url: URL
  func makeUIView(context: Context) -> WKWebView { WKWebView() }
  func updateUIView(_ uiView: WKWebView, context: Context) {
    uiView.load(URLRequest(url: url))
  }
}

الاستخدام في SwiftUI

استخدم العرض المغلّف مثل أي عرض من عروض SwiftUI، وطبّق المعدِّلات بالطريقة المعتادة.

WebView(url: URL(string: "https://apple.com")!)
  .frame(height: 400)
  .cornerRadius(12)

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

مرّر البيانات من SwiftUI إلى UIKit عبر الخصائص المخزّنة في الكائن القابل للتمثيل، والتي تُحدَّث داخل updateUIView.

struct MapView: UIViewRepresentable {
  var region: MKCoordinateRegion
  func makeUIView(context: Context) -> MKMapView { MKMapView() }
  func updateUIView(_ uiView: MKMapView, context: Context) {
    uiView.setRegion(region, animated: true)
  }
}

تفكيك عروض UIKit

طبّق dismantleUIView الاختياري لتنظيف الموارد، مثل المراقبين، عند إزالة العرض.

static func dismantleUIView(_ uiView: WKWebView, coordinator: Coordinator) {
  uiView.stopLoading()
}

مَعلمة السياق

يوفر context إمكانية الوصول إلى المنسّق والبيئة ومعاملة الحركة.

func updateUIView(_ uiView: MKMapView, context: Context) {
  print(context.environment.colorScheme)  // .light or .dark
}

قيم البيئة في UIViewRepresentable

اقرأ قيم بيئة SwiftUI من context.environment لتكييف إعدادات UIKit.

if context.environment.colorScheme == .dark {
  uiView.overrideUserInterfaceStyle = .dark
}

تحديد حجم عروض UIKit

يستخدم UIViewRepresentable الحجم الداخلي للمحتوى أو معدِّلات الإطار في SwiftUI. طبّق sizeThatFits لتحديد حجم مخصص.

func sizeThatFits(_ proposal: ProposedViewSize, uiView: WKWebView, context: Context) -> CGSize? {
  CGSize(width: proposal.width ?? 300, height: 400)
}

تجنب التأثيرات الجانبية في makeUIView

حافظ على نقاء makeUIView؛ فلا تنشئ العرض وتعدّه إلا هناك. وضع التحديثات التي تقودها الحالة داخل updateUIView.

// WRONG:
func makeUIView(context: Context) -> MKMapView {
  let v = MKMapView()
  v.setRegion(region, animated: false)  // belongs in updateUIView
  return v
}

العروض الشائعة التي يمكن تغليفها

من عروض UIKit المعتادة التي تُغلّف باستخدام UIViewRepresentable: WKWebView وMKMapView وUITextView وUIImagePickerController وAVPlayerLayer.

// UITextView with custom toolbar
struct RichTextEditor: UIViewRepresentable {
  @Binding var text: String
  // makeUIView, updateUIView, Coordinator...
}

فحص سريع

أي أسلوب في UIViewRepresentable يُستدعى لمزامنة حالة SwiftUI مع عرض UIKit بعد إنشائه للمرة الأولى؟

مراجعة الدرس

يتطلب UIViewRepresentable كلًا من makeUIView (لإنشاء العرض مرة واحدة) وupdateUIView (للمزامنة عند تغيّر الحالة). استخدم context.environment لتكييف المظهر، ونظّف الموارد في dismantleUIView. وطبّق معدِّلات إطار SwiftUI للتحكم في الحجم.

الأسئلة الشائعة

هل درس «‏UIViewRepresentable: تغليف عروض UIKit» مجاني؟

نعم — نص درس «‏UIViewRepresentable: تغليف عروض UIKit» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏UIViewRepresentable: تغليف عروض UIKit»؟

نفّذوا makeUIView وupdateUIView وفكّكوا عروض UIKit في SwiftUI. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «‏UIViewRepresentable: تغليف عروض UIKit»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏UIViewRepresentable: تغليف عروض UIKit
  2. نمط Coordinator لتواصل المفوَّض
  3. ‏UIViewControllerRepresentable
  4. ‏UIHostingController: SwiftUI داخل UIKit
← العودة إلى Swift Academy