Sobes.tech
Junior

Ar naudojate UIKit ar SwiftUI savo projektuose?

sobes.tech AI

Atsakymas iš AI

Naudoju tiek UIKit, tiek SwiftUI. Pasirinkimas priklauso nuo projekto reikalavimų:

  • UIKit dažniausiai naudoju projektuose, kuriems svarbi suderinamumas su senesnėmis iOS versijomis, sudėtinga elementų pritaikymas, legacy kodo integracija arba specifiniai navigacijos modeliai, kuriuos SwiftUI dar natively nepalaiko pilnai. Taip pat, UIKit dažnai patogiau kurti naudotojo valdiklius su nestandartiniu elgesiu arba gilų integraciją su Core Animation.

  • SwiftUI naudoju naujiems projektams, kuriems reikalingas greitas kūrimas, deklaratyvus sąsajos kūrimo požiūris, patogus būdas dirbti su būsena ir peržiūra realiu laiku. Idealiai tinka multiplatforminei Apple ekosistemos (iOS, macOS, watchOS, tvOS) plėtrai. Gerai tinka kurti sudėtingas animacijas ir perėjimus su minimaliu kodo kiekiu. Duomenų valdymas per @State, @Binding, @ObservedObject, @EnvironmentObject ir @FetchRequest žymiai supaprastina vaizdo logiką.

Dažnai derinu abu framework'us naudodamas UIHostingController SwiftUI vaizdų įterpimui į UIKit arba UIViewRepresentable/UIViewControllerRepresentable UIKit komponentų naudojimui SwiftUI.

Pavyzdys, kaip įterpti SwiftUI View į UIKit ViewController:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Jūsų 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)
    }
}