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,@EnvironmentObjectun@FetchRequestievē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)
}
}