Sobes.tech
Junior

Používáš UIKit nebo SwiftUI ve svých projektech?

sobes.tech AI

Odpověď od AI

Používám jak UIKit, tak SwiftUI. Volba závisí na požadavcích projektu:

  • Upřednostňuji UIKit pro projekty s přísnými požadavky na kompatibilitu s staršími verzemi iOS, složitou přizpůsobitelností prvků, integrací s legacy kódem nebo specifickými vzory navigace, které SwiftUI zatím plně nativně nepodporuje. Také je UIKit často pohodlnější pro tvorbu vlastních ovládacích prvků s nestandardním chováním nebo hlubokou integrací s Core Animation.

  • Používám SwiftUI pro nové projekty, které vyžadují rychlý vývoj, deklarativní přístup k tvorbě rozhraní, snadnou správu stavu a náhled v reálném čase. Je ideální pro multiplatformní vývoj v ekosystému Apple (iOS, macOS, watchOS, tvOS). Je vhodný pro tvorbu složitých animací a přechodů s minimálním množstvím kódu. Správa dat přes @State, @Binding, @ObservedObject, @EnvironmentObject a @FetchRequest výrazně zjednodušuje logiku zobrazení.

Často kombinuji oba frameworky (interoperabilita), používám UIHostingController pro začlenění SwiftUI pohledů do UIKit nebo UIViewRepresentable/UIViewControllerRepresentable pro použití UIKit komponent v SwiftUI.

Příklad začlenění SwiftUI pohledu do UIKit ViewControlleru:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Váš SwiftUI pohled
        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)
    }
}