Sobes.tech
Intern

Používate vo svojej práci UIKit alebo SwiftUI?

sobes.tech AI

Odpoveď od AI

Áno, používam oba rámce v závislosti od požiadaviek projektu.

UIKit je zrelý rámec, ktorý je vhodný pre projekty s dlhoročnou históriou, zložitou personalizáciou prvkov rozhrania, integráciou s nízkoúrovňovými komponentmi iOS a v prípadoch, keď je potrebná maximálna spätná kompatibilita.

SwiftUI je deklaratívny prístup, ktorý zjednodušuje vývoj rozhraní, najmä pre nové projekty, multiplatformové aplikácie (iOS, macOS, watchOS, tvOS) a prototypovanie. Umožňuje písať stručnejší a prehľadnejší kód.

Často projekty používajú kombináciu týchto rámcov, napríklad pomocou UIHostingController na začlenenie SwiftUI pohľadov do UIKit a naopak.

Pri výbere rámca zohľadňujem nasledujúce faktory:

  • Požiadavky na podporu starších OS: UIKit je lepší pre staršie verzie iOS.
  • Zložitosť UI/Animácií: SwiftUI často zjednodušuje tvorbu zložitých animácií a prechodov.
  • Veľkosť tímu a jeho skúsenosti: Znalosť UIKit je rozšírenejšia na trhu.
  • Budúci vývoj projektu: SwiftUI sa aktívne vyvíja a je budúcnosťou natívnej technológie Apple.
// Príklad použitia UIHostingController pre SwiftUI View v UIKit
import UIKit
import SwiftUI

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let mySwiftUIView = MyCustomSwiftUIView()
        let hostingController = UIHostingController(rootView: mySwiftUIView)

        // Pridanie SwiftUI pohľadu do hierarchie UIViewController
        addChild(hostingController)
        view.addSubview(hostingController.view)

        // Nastavenie Constraints
        hostingController.view.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            hostingController.view.topAnchor.constraint(equalTo: view.topAnchor),
            hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])

        hostingController.didMove(toParent: self)
    }
}

struct MyCustomSwiftUIView: View {
    var body: some View {
        Text("Hello from SwiftUI!")
            .padding()
            .background(Color.blue)
            .foregroundColor(.white)
            .cornerRadius(10)
    }
}

Oba rámce majú svoje silné stránky, a ich výber závisí od konkrétnej úlohy a kontextu projektu.