SwiftUI
Aus Wikizone
Version vom 21. Dezember 2022, 15:40 Uhr von 134.3.86.14 (Diskussion) (Die Seite wurde neu angelegt: „SwiftUI gilt als Nachfolger von Apples UIKit zum Erstellen von Benutzeroberflächen (UserInterface). Es kann sowohl für Desktop als auch für Mobile Geräte g…“)
SwiftUI gilt als Nachfolger von Apples UIKit zum Erstellen von Benutzeroberflächen (UserInterface). Es kann sowohl für Desktop als auch für Mobile Geräte genutzt werden.
Bei UIKit hat klassisch in MVC (Model View Controller) Manier programmiert. D.h. man hat einen Controller, der den Datenfluss zwischen der Datenhaltung und dem View also der Benutzeransicht gemanagt hat.
Bei SwiftUI erzeugt man Bindings zwischen Model und View und das System kontrolliert selbst den Datenfluss. Es kann also das Model automatisch aktualisieren wenn der Benutzer etwas tut. Oder es aktualisiert den View, wenn das Model es verlangt. Das spart eine Menge Programmierarbeit.
Beispiele
SwiftUI - Color Picker
//
// ContentView.swift
// ColorPicker
//
// Created by Stephan Schlegel on 20.12.22.
//
import SwiftUI
struct ContentView: View {
// state vars
// it's commonly good practice to make them private
// These vars are the "source of truth" meaning it
// owns the data. We need no other copy of the data.
@State private var r: Double = 239
@State private var g: Double = 141
@State private var b: Double = 82
var body: some View {
ZStack{
Rectangle()
.foregroundColor(Color(.systemFill))
.ignoresSafeArea()
VStack {
Rectangle()
.frame(width: 100, height: 100)
.foregroundColor(Color(red:r/255,green:g/255, blue:b/255))
.border(Color(.black),width:1)
// Passing in State Var Bindings to the Slider View.
// This way it can read and write from/to the vars
SliderView(label:"Red",value: $r)
SliderView(label:"Green",value: $g)
SliderView(label:"Blue",value: $b)
}
.padding()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
//
// SliderView.swift
// ColorPicker
//
// Created by Stephan Schlegel on 20.12.22.
//
import SwiftUI
struct SliderView: View {
var label:String
@Binding var value:Double
var body: some View {
VStack{
Slider(value:$value, in: 0...255, step: 1)
Text("\(label): \(Int(value))")
}
}
}
struct SliderView_Previews: PreviewProvider {
static var previews: some View {
// For Preview we pass in label and value from Slider view
// value is not a real binding but at least we can
// see something in our preview to imagin where we go
SliderView( label: "Label",value:Binding.constant(0) )
.padding()
}
}
SwiftUI - Slot Machine