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,@EnvironmentObjectir@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)
}
}