Sobes.tech
Junior

Da li koristiš UIKit ili SwiftUI u svojim projektima?

sobes.tech АИ

Одговор од АИ

Koristim i UIKit i SwiftUI. Izbor zavisi od zahteva projekta:

  • UIKit preferiram za projekte sa strogim zahtevima za kompatibilnost sa starijim verzijama iOS-a, složenom prilagođavanjem elemenata, integracijom sa legacy kodom ili specifičnim navigacionim obrascima koje SwiftUI trenutno ne podržava u potpunosti. Takođe, UIKit je često pogodniji za kreiranje prilagođenih kontrola sa nestandardnim ponašanjem ili dubokom integracijom sa Core Animation.

  • SwiftUI koristim za nove projekte koji zahtevaju brzu izradu, deklarativni pristup izgradnji interfejsa, jednostavnu rad sa stanjem i prikaz u realnom vremenu. Idealan je za razvoj na više platformi unutar Apple ekosistema (iOS, macOS, watchOS, tvOS). Dobro je pogodan za kreiranje složenih animacija i prelaza sa minimalnim brojem koda. Rad sa podacima je jednostavniji putem @State, @Binding, @ObservedObject, @EnvironmentObject i @FetchRequest, što značajno pojednostavljuje logiku prikaza.

Često kombinuje oba okvira (interoperability), koristeći UIHostingController za ugradnju SwiftUI prikaza u UIKit ili UIViewRepresentable/UIViewControllerRepresentable za korišćenje UIKit komponenti u SwiftUI.

Primer ugradnje SwiftUI View u UIKit ViewController:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Vaš 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)
    }
}