Sobes.tech
Junior

Kas kasutad UIKit või SwiftUI oma projektides?

sobes.tech AI

Vastus AI-lt

Ma kasutan nii UIKit kui ka SwiftUI-d. Valik sõltub projekti nõuetest:

  • UIKit eelistangi projektidele, mille puhul on oluline ühilduvus vanemate iOS-i versioonidega, keeruline kohandamine, legacy-koodi integreerimine või spetsiifilised navigeerimismudelid, mida SwiftUI veel täielikult ei toeta. Samuti on UIKit sageli mugavam kasutajaliidese kontrollide loomisel, millel on ebatavaline käitumine või sügav integreerimine Core Animationiga.

  • SwiftUI kasutan uute projektide puhul, mis nõuavad kiiret arendust, deklaratiivset lähenemist liidese ehitamisel, mugavat oleku haldamist ja eelvaadet reaalajas. Ideaalne Apple'i ökosüsteemi (iOS, macOS, watchOS, tvOS) multiplatvormseks arendamiseks. Sobib hästi keeruliste animatsioonide ja üleminekute loomiseks minimaalse koodiga. Andmetega töötamine @State, @Binding, @ObservedObject, @EnvironmentObject ja @FetchRequest abil lihtsustab oluliselt vaate loogikat.

Sageli kombineerin mõlemat raamistikku, kasutades UIHostingController SwiftUI vaadete sisestamiseks UIKit-i või UIViewRepresentable/UIViewControllerRepresentable UIKit-komponentide kasutamiseks SwiftUI-s.

Näide SwiftUI vaate sisestamisest UIKit ViewController-i:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Teie SwiftUI vaade
        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)
    }
}