Používáš UIKit nebo SwiftUI ve svých projektech?
sobes.tech AI
Odpověď od AI
Používám jak UIKit, tak SwiftUI. Volba závisí na požadavcích projektu:
-
Upřednostňuji UIKit pro projekty s přísnými požadavky na kompatibilitu s staršími verzemi iOS, složitou přizpůsobitelností prvků, integrací s legacy kódem nebo specifickými vzory navigace, které SwiftUI zatím plně nativně nepodporuje. Také je UIKit často pohodlnější pro tvorbu vlastních ovládacích prvků s nestandardním chováním nebo hlubokou integrací s Core Animation.
-
Používám SwiftUI pro nové projekty, které vyžadují rychlý vývoj, deklarativní přístup k tvorbě rozhraní, snadnou správu stavu a náhled v reálném čase. Je ideální pro multiplatformní vývoj v ekosystému Apple (iOS, macOS, watchOS, tvOS). Je vhodný pro tvorbu složitých animací a přechodů s minimálním množstvím kódu. Správa dat přes
@State,@Binding,@ObservedObject,@EnvironmentObjecta@FetchRequestvýrazně zjednodušuje logiku zobrazení.
Často kombinuji oba frameworky (interoperabilita), používám UIHostingController pro začlenění SwiftUI pohledů do UIKit nebo UIViewRepresentable/UIViewControllerRepresentable pro použití UIKit komponent v SwiftUI.
Příklad začlenění SwiftUI pohledu do UIKit ViewControlleru:
import SwiftUI
import UIKit
class MyUIKitViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let swiftUIView = MySwiftUIView() // Váš SwiftUI pohled
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)
}
}