Sobes.tech
Junior

Használod a UIKit vagy a SwiftUI-t a projektjeidben?

sobes.tech MI

Válasz az MI-től

Mind UIKit-et, mind SwiftUI-t használok. A választás a projekt követelményeitől függ:

  • UIKit-et részesítem előnyben olyan projektekhez, ahol szigorú kompatibilitási követelmények vannak régebbi iOS-verziókkal, összetett testreszabás, legacy-kód integráció vagy olyan navigációs minták esetén, amelyeket a SwiftUI még nem támogat teljes mértékben natívan. Emellett a UIKit gyakran kényelmesebb egyedi vezérlők létrehozásához nem szabványos viselkedéssel vagy mély integrációval a Core Animation-nel.

  • SwiftUI-t használok új projektekhez, amelyek gyors fejlesztést, deklaratív felületépítést, könnyű állapotkezelést és valós idejű előnézetet igényelnek. Ideális a többplatformos fejlesztéshez az Apple ökoszisztémában (iOS, macOS, watchOS, tvOS). Kiválóan alkalmas összetett animációk és átmenetek létrehozására minimális kóddal. Az adatok kezelése @State, @Binding, @ObservedObject, @EnvironmentObject és @FetchRequest segítségével jelentősen egyszerűsíti a nézet logikáját.

Gyakran kombinálom mindkét keretrendszert (együttműködés), a SwiftUI nézetek UIKit-be ágyazásához a UIHostingController-t használom, vagy UIKit-komponensek SwiftUI-ben való használatához a UIViewRepresentable/UIViewControllerRepresentable-t.

Példa egy SwiftUI nézet UIKit ViewController-be ágyazására:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // A SwiftUI nézeted
        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)
    }
}