Sobes.tech
Junior

Vai izmantojat UIKit vai SwiftUI savos projektos?

sobes.tech AI

Atbilde no AI

Es izmantoju gan UIKit, gan arī SwiftUI. Izvēle ir atkarīga no projekta prasībām:

  • UIKit es parasti izvēlos projektos ar stingriem saderības prasībām ar vecākām iOS versijām, sarežģītu elementu pielāgošanu, integrāciju ar legacy kodu vai specifiskiem navigācijas modeļiem, kurus SwiftUI vēl pilnībā nativā veidā nepārstāv. Tāpat UIKit bieži ir ērtāks, veidojot pielāgotus kontrolus ar nestandarta uzvedību vai dziļu integrāciju ar Core Animation.

  • SwiftUI es izmantoju jauniem projektiem, kuriem nepieciešams ātrs izstrādes process, deklaratīva pieeja interfeisa veidošanai, ērtas darbības ar stāvokli un priekšskatījumu reāllaikā. Ideāli piemērots multiplatformu izstrādei Apple ekosistēmā (iOS, macOS, watchOS, tvOS). Labs risinājums sarežģītu animāciju un pāreju veidošanai ar minimālu koda daudzumu. Datu pārvaldība ar @State, @Binding, @ObservedObject, @EnvironmentObject un @FetchRequest ievērojami vienkāršo skatījuma loģiku.

Bieži apvienoju abus frameworkus, izmantojot UIHostingController SwiftUI skatījumu ievietošanai UIKit vai UIViewRepresentable/UIViewControllerRepresentable UIKit komponentu izmantošanai SwiftUI.

Piemērs SwiftUI skatījuma ievietošanai UIKit ViewController:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Jūsu SwiftUI skatījums
        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)
    }
}