Sobes.tech
Intern

Naudojate UIKit ar SwiftUI savo darbe?

sobes.tech AI

Atsakymas iš AI

Taip, naudoju abu karkasus priklausomai nuo projekto reikalavimų.

UIKit yra subrendęs karkasas, kuris tinka projektams su ilga istorija, sudėtinga pritaikymu, integracija su žemynio lygio iOS komponentais ir kai reikalingas maksimalus atgalinis suderinamumas.

SwiftUI yra deklaratyvus požiūris, kuris supaprastina sąsajų kūrimą, ypač naujiems projektams, kryžminėms platformoms (iOS, macOS, watchOS, tvOS) ir prototipavimui. Jis leidžia rašyti trumpesnį ir aiškesnį kodą.

Dažnai projektai naudoja šių dviejų karkasų derinius, pavyzdžiui, naudojant UIHostingController SwiftUI vaizdams integruoti į UIKit ir atvirkščiai.

Renkantis karkasą, atsižvelgiu į šiuos veiksnius:

  • Senesnių OS palaikymo reikalavimai: UIKit geriau tinka senesnėms iOS versijoms.
  • UI/animacijų sudėtingumas: SwiftUI dažnai palengvina sudėtingų animacijų ir perėjimų kūrimą.
  • Komandos dydis ir patirtis: Žinojimas apie UIKit yra plačiau paplitęs rinkoje.
  • Projekto ateities vystymas: SwiftUI aktyviai vystosi ir yra Apple ateities natūrali technologija.
// Pavyzdys, kaip naudoti UIHostingController SwiftUI vaizdui įdiegti UIKit
import UIKit
import SwiftUI

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let mySwiftUIView = MyCustomSwiftUIView()
        let hostingController = UIHostingController(rootView: mySwiftUIView)

        // SwiftUI vaizdo pridėjimas į UIViewController hierarchiją
        addChild(hostingController)
        view.addSubview(hostingController.view)

        // Constraints nustatymas
        hostingController.view.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            hostingController.view.topAnchor.constraint(equalTo: view.topAnchor),
            hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])

        hostingController.didMove(toParent: self)
    }
}

struct MyCustomSwiftUIView: View {
    var body: some View {
        Text("Hello from SwiftUI!")
            .padding()
            .background(Color.blue)
            .foregroundColor(.white)
            .cornerRadius(10)
    }
}

Abi karkasai turi savo stipriąsias puses, ir jų pasirinkimas priklauso nuo konkrečios užduoties ir projekto konteksto.