Swift Academy · درس

‏UIHostingController: SwiftUI داخل UIKit

ضمّنوا عروض SwiftUI في تطبيقات UIKit باستخدام UIHostingController.

الدرس 4 من 413 خطوة

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

ما هو UIHostingController؟

إن UIHostingController هو وحدة تحكم عرض في UIKit تستضيف تسلسلاً هرميًا من عروض SwiftUI.

import SwiftUI
let swiftUIView = Text("Hello from SwiftUI")
let hostingVC = UIHostingController(rootView: swiftUIView)

التضمين داخل UIViewController

أضيفوا وحدة تحكم استضافة كوحدة تحكم عرض فرعية باستخدام واجهة برمجة التطبيقات القياسية للوحدات الفرعية.

class MyViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    let child = UIHostingController(rootView: ContentView())
    addChild(child)
    view.addSubview(child.view)
    child.view.frame = view.bounds
    child.didMove(toParent: self)
  }
}

Auto Layout مع وحدة تحكم الاستضافة

ثبّتوا عرض وحدة تحكم الاستضافة باستخدام Auto Layout لدمجه في تخطيط UIKit.

child.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
  child.view.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
  child.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
  child.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
  child.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])

تحديث العرض الجذر

حدّثوا عرض SwiftUI المستضاف من خلال تعيين rootView في وحدة تحكم الاستضافة.

let hostingVC = UIHostingController(rootView: MyView(count: 0))
// Later:
hostingVC.rootView = MyView(count: 5)

العرض بطريقة مشروطة

اعرضوا وحدة تحكم الاستضافة مثل أي عرض مشروط في UIKit، للاستفادة من محتوى SwiftUI ضمن عرض UIKit.

let vc = UIHostingController(rootView: MySwiftUIView())
present(vc, animated: true)

الدفع إلى مكدس التنقل

ادفعوا وحدة تحكم الاستضافة إلى UINavigationController للتنقل إلى محتوى SwiftUI من UIKit.

let vc = UIHostingController(rootView: DetailView())
navigationController?.pushViewController(vc, animated: true)

مشاركة البيانات عبر ObservableObject

مرّروا ObservableObject مشتركًا إلى بيئة عرض SwiftUI لتوفير تدفق بيانات ثنائي الاتجاه.

let model = SharedModel()
let vc = UIHostingController(rootView: SwiftUIView().environmentObject(model))
// Changes to model in UIKit update SwiftUI and vice versa

تحديد حجم وحدة تحكم الاستضافة

استخدموا sizeThatFits لحساب الحجم الأصلي لمحتوى SwiftUI بهدف تضمينه في عروض التمرير.

let size = hostingVC.sizeThatFits(in: CGSize(width: 320, height: UIView.layoutFittingCompressedSize.height))
hostingVC.view.frame.size = size

المظهر والتنسيق

عيّنوا overrideUserInterfaceStyle في وحدة تحكم الاستضافة للتحكم في الوضع الداكن أو الفاتح بشكل مستقل.

hostingVC.overrideUserInterfaceStyle = .dark

إعداد التطبيق القائم على المشاهد

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

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options: UIScene.ConnectionOptions) {
  guard let windowScene = scene as? UIWindowScene else { return }
  let window = UIWindow(windowScene: windowScene)
  window.rootViewController = UIHostingController(rootView: ContentView())
  self.window = window
  window.makeKeyAndVisible()
}

حالات الاستخدام

يُعد UIHostingController مناسبًا للترحيل التدريجي: احتفظوا بالتنقل في UIKit مع تضمين شاشات الميزات الجديدة المبنية باستخدام SwiftUI.

// UIKit app gradually migrated:
// - Old screens: UIViewController
// - New screens: UIHostingController(rootView: NewFeatureView())

تحقق سريع

ما فئة UIKit التي تستخدمونها لتضمين عرض SwiftUI داخل تسلسل هرمي لوحدات تحكم العرض في UIKit؟

مراجعة الدرس

يربط UIHostingController(rootView:) بين SwiftUI وUIKit. أضيفوه كوحدة تحكم عرض فرعية مع قيود Auto Layout، أو اعرضوه أو ادفعوه. حدّثوه عبر rootView. شاركوا البيانات عبر ObservableObject وenvironmentObject.

البدء مجانًا

تعلم Swift مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
122
الدروس
409

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

هل درس «‏UIHostingController: SwiftUI داخل UIKit» مجاني؟

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

ماذا ستتعلم في «‏UIHostingController: SwiftUI داخل UIKit»؟

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

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

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

كم من الوقت يستغرق درس «‏UIHostingController: SwiftUI داخل UIKit»؟

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

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

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

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

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