Swift - @state vars: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „'''Hinweis''': @state ist nicht für UIView verfügbar sondern für die View Klasse. Nicht verwechseln. In SwiftUI ist eine @State Variable eine Variable, die…“)
 
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 20: Zeile 20:
 
Es ist wichtig zu beachten, dass @State Eigenschaften nur innerhalb des Objekts, das es deklariert, von self modifiziert werden dürfen und auch nicht zwischen verschiedenen Ansichten geteilt werden können.
 
Es ist wichtig zu beachten, dass @State Eigenschaften nur innerhalb des Objekts, das es deklariert, von self modifiziert werden dürfen und auch nicht zwischen verschiedenen Ansichten geteilt werden können.
  
@State Variablen ähneln @ObservedObject und @EnvironmentObject, da sie alle den Zustand einer Ansicht speichern, aber sie haben unterschiedliche Anwendungsfälle. @ObservedObject wird verwendet, um den Zustand eines Objekts zu speichern, das von mehreren Ansichten geteilt wird, während @EnvironmentObject verwendet wird, um den Zustand eines Objekts zu speichern, das im gesamten App geteilt wird.
+
'''@State Variablen ähneln @ObservedObject und @EnvironmentObject''', da sie alle den Zustand einer Ansicht speichern, aber sie haben unterschiedliche Anwendungsfälle. '''@ObservedObject''' wird verwendet, um den '''Zustand eines Objekts zu speichern, das von mehreren Ansichten geteilt wird''', während '''@EnvironmentObject''' verwendet wird, um den '''Zustand eines Objekts zu speichern, das im gesamten App geteilt wird.'''
 +
 
 +
== Unterstützt UIView ebenfalls @state? ==
 +
 
 +
Nein, @state ist ein Feature von SwiftUI und es ist spezifisch für dieses Framework und ist nicht in UIView verfügbar.
 +
 
 +
@state ist ein Property Wrapper, der verwendet wird, um den Zustand einer Ansicht im SwiftUI-Framework zu verwalten. Es ermöglicht es Ihnen, eine Eigenschaft als den Zustand der Ansicht zu markieren und sicherzustellen, dass Änderungen an dieser Eigenschaft automatisch die Ansicht aktualisieren.
 +
 
 +
In UIView wird der Zustand in der Regel durch Eigenschaften verwaltet und Änderungen an diesen Eigenschaften müssen manuell durch Aufru
 +
dev@stephanschlegel.de
 +
Kann ich View innerhalb von UIView benutzen?
 +
 
 +
Ja, es ist möglich, SwiftUI-Ansichten innerhalb von UIViews zu verwenden. Dies kann erreicht werden, indem man einen UIViewRepresentable-Wrapper erstellt, der die SwiftUI-Ansicht in eine UIView kapselt und diese dann in die UIView-Hierarchie einbetten kann.
 +
 
 +
Hier ist ein Beispiel, wie man eine SwiftUI-Ansicht in eine UIView einbetten kann:
 +
 
 +
swift
 +
<syntaxhighlight lang="switch">
 +
struct SwiftUIView: View {
 +
    var body: some View {
 +
        Text("Hello, World!")
 +
    }
 +
}
 +
 
 +
struct SwiftUIViewWrapper: UIViewRepresentable {
 +
    func makeUIView(context: Context) -> UIView {
 +
        return UIView()
 +
    }
 +
 
 +
    func updateUIView(_ uiView: UIView, context: Context) {
 +
        let swiftUIView = SwiftUIView()
 +
        let swiftUIViewController = UIHostingController(rootView: swiftUIView)
 +
        swiftUIViewController.view.frame = uiView.bounds
 +
        uiView.addSubview(swiftUIViewController.view)
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 
 +
Dann kann man diese WrapperView in einer UIViewController oder andere UIView Klasse nutzen.
 +
 
 +
 
 +
<syntaxhighlight lang="switch">
 +
class MyViewController: UIViewController {
 +
    override func viewDidLoad() {
 +
        super.viewDidLoad()
 +
        let swiftUIViewWrapper = SwiftUIViewWrapper()
 +
        view.addSubview(swiftUIViewWrapper.view)
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 
 +
Diese Technik ermöglicht es Ihnen, die Vorteile von SwiftUI und UIKit zu nutzen und eine gemischte App zu erstellen.
 +
 
 +
== Welches sind die Vorteile von SwiftUI und UIKit im Vergleich? ==
 +
 
 +
SwiftUI und UIKit sind beide Frameworks für die Erstellung von Benutzeroberflächen auf Apple-Plattformen, aber sie haben einige Unterschiede in Bezug auf ihre Funktionalität und Verwendung.
 +
 
 +
'''Vorteile von SwiftUI:'''
 +
 
 +
* Einfacheres und intuitiveres Design: SwiftUI bietet eine deklarative Syntax, die es Entwicklern erleichtert, die Benutzeroberfläche zu erstellen und zu verwalten. Es erfordert weniger Code, um dieselben Ergebnisse zu erzielen, und bietet eine höhere Abstraktionsebene.
 +
* Plattformübergreifend: SwiftUI kann für iOS, iPadOS, macOS, watchOS und tvOS verwendet werden, was die Entwicklung von plattformübergreifenden Apps vereinfacht.
 +
* Automatisierte Aktualisierungen: SwiftUI automatisiert das Aktualisieren der Ansicht, wenn sich die Daten ändern, was die Entwicklung von Apps mit dynamischen Benutzeroberflächen vereinfacht.
 +
 
 +
'''Vorteile von UIKit:'''
 +
 
 +
* Ausgereifte und erprobte Technologie: UIKit ist das seit langem etablierte Framework für die Erstellung von Benutzeroberflächen auf Apple-Plattformen und hat eine breite Unterstützung und eine große Anzahl von Ressourcen und Dokumentationen.
 +
* Erweiterbarkeit: UIKit bietet Entwicklern eine breite Palette an vordefinierten UI-Elementen und die Möglichkeit, benutzerdefinierte Steuerelemente zu erstellen, was es ermöglicht, eine breite Palette von Anforderungen an die Benutzeroberfläche zu erfüllen.
 +
* Rückwärtskompatibilität: Apps, die mit UIKit erstellt wurden, sind rückwärtskompatibel mit älteren Versionen von iOS und können daher auf eine größere Anzahl von Geräten ausgeführt werden.
 +
 
 +
Es gibt also keine universelle Lösung, sondern es hängt von den Anforderungen und Zielen des Projekts ab, welches Framework am besten geeignet ist. In den meisten Fällen kann man aber mit SwiftUI schneller und einfacher eine App erstellen, aber in bestimmten Fällen ist es nötig die Möglichkeiten von UIKit zu nutzen.

Aktuelle Version vom 28. Januar 2023, 08:57 Uhr

Hinweis: @state ist nicht für UIView verfügbar sondern für die View Klasse. Nicht verwechseln.

In SwiftUI ist eine @State Variable eine Variable, die verwendet wird, um den Zustand eines View zu speichern. Wenn der Wert einer @State Variable sich ändert, wird die Ansicht automatisch neu gerendert, um den neuen Zustand widerzuspiegeln.

@State Variablen werden verwendet, um den internen Zustand eines Views zu speichern, wie z.B. den aktuellen Wert eines Textfeldes, das ausgewählte Element in einer Liste oder den auf-/zugeklappten Zustand eines Views. Sie werden auf View-Ebene definiert und können von allen Unteransichten dieses Views aufgerufen und modifiziert werden.

Hier ist ein Beispiel dafür, wie man eine @State Variable in einer SwiftUI Ansicht verwendet:

struct MyView: View {
    @State private var text = "Hallo Welt"

    var body: some View {
        TextField("Geben Sie Text ein", text: $text)
    }
}

In diesem Beispiel wird die @State Variable text verwendet, um den aktuellen Text im TextField zu speichern. Wenn der Benutzer im Textfeld etwas eingibt, wird der Wert der text Variable aktualisiert und die Ansicht wird neu gerendert, um den neuen Wert widerzuspiegeln.

Es ist wichtig zu beachten, dass @State Eigenschaften nur innerhalb des Objekts, das es deklariert, von self modifiziert werden dürfen und auch nicht zwischen verschiedenen Ansichten geteilt werden können.

@State Variablen ähneln @ObservedObject und @EnvironmentObject, da sie alle den Zustand einer Ansicht speichern, aber sie haben unterschiedliche Anwendungsfälle. @ObservedObject wird verwendet, um den Zustand eines Objekts zu speichern, das von mehreren Ansichten geteilt wird, während @EnvironmentObject verwendet wird, um den Zustand eines Objekts zu speichern, das im gesamten App geteilt wird.

Unterstützt UIView ebenfalls @state?[Bearbeiten]

Nein, @state ist ein Feature von SwiftUI und es ist spezifisch für dieses Framework und ist nicht in UIView verfügbar.

@state ist ein Property Wrapper, der verwendet wird, um den Zustand einer Ansicht im SwiftUI-Framework zu verwalten. Es ermöglicht es Ihnen, eine Eigenschaft als den Zustand der Ansicht zu markieren und sicherzustellen, dass Änderungen an dieser Eigenschaft automatisch die Ansicht aktualisieren.

In UIView wird der Zustand in der Regel durch Eigenschaften verwaltet und Änderungen an diesen Eigenschaften müssen manuell durch Aufru dev@stephanschlegel.de Kann ich View innerhalb von UIView benutzen?

Ja, es ist möglich, SwiftUI-Ansichten innerhalb von UIViews zu verwenden. Dies kann erreicht werden, indem man einen UIViewRepresentable-Wrapper erstellt, der die SwiftUI-Ansicht in eine UIView kapselt und diese dann in die UIView-Hierarchie einbetten kann.

Hier ist ein Beispiel, wie man eine SwiftUI-Ansicht in eine UIView einbetten kann:

swift

struct SwiftUIView: View {
    var body: some View {
        Text("Hello, World!")
    }
}

struct SwiftUIViewWrapper: UIViewRepresentable {
    func makeUIView(context: Context) -> UIView {
        return UIView()
    }

    func updateUIView(_ uiView: UIView, context: Context) {
        let swiftUIView = SwiftUIView()
        let swiftUIViewController = UIHostingController(rootView: swiftUIView)
        swiftUIViewController.view.frame = uiView.bounds
        uiView.addSubview(swiftUIViewController.view)
    }
}

Dann kann man diese WrapperView in einer UIViewController oder andere UIView Klasse nutzen.


class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let swiftUIViewWrapper = SwiftUIViewWrapper()
        view.addSubview(swiftUIViewWrapper.view)
    }
}

Diese Technik ermöglicht es Ihnen, die Vorteile von SwiftUI und UIKit zu nutzen und eine gemischte App zu erstellen.

Welches sind die Vorteile von SwiftUI und UIKit im Vergleich?[Bearbeiten]

SwiftUI und UIKit sind beide Frameworks für die Erstellung von Benutzeroberflächen auf Apple-Plattformen, aber sie haben einige Unterschiede in Bezug auf ihre Funktionalität und Verwendung.

Vorteile von SwiftUI:

  • Einfacheres und intuitiveres Design: SwiftUI bietet eine deklarative Syntax, die es Entwicklern erleichtert, die Benutzeroberfläche zu erstellen und zu verwalten. Es erfordert weniger Code, um dieselben Ergebnisse zu erzielen, und bietet eine höhere Abstraktionsebene.
  • Plattformübergreifend: SwiftUI kann für iOS, iPadOS, macOS, watchOS und tvOS verwendet werden, was die Entwicklung von plattformübergreifenden Apps vereinfacht.
  • Automatisierte Aktualisierungen: SwiftUI automatisiert das Aktualisieren der Ansicht, wenn sich die Daten ändern, was die Entwicklung von Apps mit dynamischen Benutzeroberflächen vereinfacht.

Vorteile von UIKit:

  • Ausgereifte und erprobte Technologie: UIKit ist das seit langem etablierte Framework für die Erstellung von Benutzeroberflächen auf Apple-Plattformen und hat eine breite Unterstützung und eine große Anzahl von Ressourcen und Dokumentationen.
  • Erweiterbarkeit: UIKit bietet Entwicklern eine breite Palette an vordefinierten UI-Elementen und die Möglichkeit, benutzerdefinierte Steuerelemente zu erstellen, was es ermöglicht, eine breite Palette von Anforderungen an die Benutzeroberfläche zu erfüllen.
  • Rückwärtskompatibilität: Apps, die mit UIKit erstellt wurden, sind rückwärtskompatibel mit älteren Versionen von iOS und können daher auf eine größere Anzahl von Geräten ausgeführt werden.

Es gibt also keine universelle Lösung, sondern es hängt von den Anforderungen und Zielen des Projekts ab, welches Framework am besten geeignet ist. In den meisten Fällen kann man aber mit SwiftUI schneller und einfacher eine App erstellen, aber in bestimmten Fällen ist es nötig die Möglichkeiten von UIKit zu nutzen.