Sobes.tech
Junior

Používate UIKit alebo SwiftUI vo svojich projektoch?

sobes.tech AI

Odpoveď od AI

Používam ako UIKit, tak aj SwiftUI. Výber závisí od požiadaviek projektu:

  • UIKit preferujem pre projekty s prísnymi požiadavkami na kompatibilitu so staršími verziami iOS, zložitou prispôsobením prvkov, integráciou s legacy kódom alebo špecifickými navigačnými vzormi, ktoré SwiftUI zatiaľ nativne nepodporuje v plnej miere. Taktiež je UIKit často vhodnejší na tvorbu vlastných ovládacích prvkov s nestandardným správaním alebo hlbokou integráciou s Core Animation.

  • SwiftUI používam pre nové projekty, ktoré vyžadujú rýchly vývoj, deklaratívny prístup k tvorbe rozhrania, jednoduchú prácu so stavom a náhľad v reálnom čase. Ideálny je pre multiplatformový vývoj v rámci Apple ekosystému (iOS, macOS, watchOS, tvOS). Dobré je na tvorbu zložitých animácií a prechodov s minimálnym množstvom kódu. Práca s dátami cez @State, @Binding, @ObservedObject, @EnvironmentObject a @FetchRequest výrazne zjednodušuje logiku zobrazenia.

Často kombinujem oba rámce (interoperability), využívajúc UIHostingController na vloženie SwiftUI zobrazení do UIKit alebo UIViewRepresentable/UIViewControllerRepresentable na použitie UIKit komponentov v SwiftUI.

Príklad vloženia SwiftUI View do UIKit ViewController:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Vaše SwiftUI View
        let hostingController = UIHostingController(rootView: swiftUIView)

        addChild(hostingController)
        view.addSubview(hostingController.view)
        hostingController.didMove(toParent: self)

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

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