Sobes.tech
Junior

Verwendest du UIKit oder SwiftUI in deinen Projekten?

sobes.tech KI

Antwort von AI

Ich verwende sowohl UIKit als auch SwiftUI. Die Wahl hängt von den Anforderungen des Projekts ab:

  • Ich bevorzuge UIKit für Projekte mit strengen Anforderungen an die Kompatibilität mit älteren iOS-Versionen, komplexe Anpassungen von Elementen, Integration mit Legacy-Code oder spezifische Navigationsmuster, die SwiftUI noch nicht vollständig nativ unterstützt. Außerdem ist UIKit oft praktischer für die Erstellung benutzerdefinierter Steuerelemente mit nicht-standardmäßigem Verhalten oder tiefer Integration mit Core Animation.

  • Ich nutze SwiftUI für neue Projekte, die eine schnelle Entwicklung, einen deklarativen Ansatz zum Aufbau der Oberfläche, einfache Arbeit mit dem Zustand und Echtzeit-Vorschau erfordern. Es ist ideal für plattformübergreifende Entwicklung im Apple-Ökosystem (iOS, macOS, watchOS, tvOS). Sehr geeignet für die Erstellung komplexer Animationen und Übergänge mit minimalem Code. Die Datenverwaltung über @State, @Binding, @ObservedObject, @EnvironmentObject und @FetchRequest vereinfacht die Logik der Ansicht erheblich.

Ich kombiniere oft beide Frameworks (Interoperabilität), indem ich UIHostingController verwende, um SwiftUI-Ansichten in UIKit einzubetten, oder UIViewRepresentable/UIViewControllerRepresentable, um UIKit-Komponenten in SwiftUI zu nutzen.

Beispiel für die Einbettung einer SwiftUI-Ansicht in einen UIKit-ViewController:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Ihre SwiftUI-Ansicht
        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)
    }
}